Katatunix
Senior Member
Bài viết tập trung về bảo mật nên loại hash đề cập trong bài là cryptographic hash.
Thực ra ban đầu hash dc tạo ra để phục vụ cho việc tìm kiếm phần tử trong các cấu trúc dữ liệu dạng key value: hash table (HashMap trong Java, Dictionary trong C#…).
Xin chia sẻ với các thím cách hash table hoạt động, nôm na thôi.
Trong table chứa 1 mảng (array) mà mỗi phần tử là 1 danh sách liên kết (dslk) chứa ds các cặp key/value.
Khi 1 cặp key/value dc thêm vào table, key dc hash thành 1 số int i, key & value đó dc add vào dslk thứ i.
Hàm hash dạng này bắt buộc phải rất nhanh, chấp nhận đụng độ, miễn đừng quá đáng quá. Nên có thể 2 key khác nhau sẽ đi cùng vô 1 chuồng thứ i (dslk thứ i).
Các thím chắc sẽ đoán dc cách tìm kiếm value khi biết key
Lúc này các method trong Java như getHashCode và equals phát huy tác dụng: cái đầu dùng để hash key, cái sau dùng để tìm tuần tự trong dslk khi hash đụng độ.
Thực ra ban đầu hash dc tạo ra để phục vụ cho việc tìm kiếm phần tử trong các cấu trúc dữ liệu dạng key value: hash table (HashMap trong Java, Dictionary trong C#…).
Xin chia sẻ với các thím cách hash table hoạt động, nôm na thôi.
Trong table chứa 1 mảng (array) mà mỗi phần tử là 1 danh sách liên kết (dslk) chứa ds các cặp key/value.
Khi 1 cặp key/value dc thêm vào table, key dc hash thành 1 số int i, key & value đó dc add vào dslk thứ i.
Hàm hash dạng này bắt buộc phải rất nhanh, chấp nhận đụng độ, miễn đừng quá đáng quá. Nên có thể 2 key khác nhau sẽ đi cùng vô 1 chuồng thứ i (dslk thứ i).
Các thím chắc sẽ đoán dc cách tìm kiếm value khi biết key
Lúc này các method trong Java như getHashCode và equals phát huy tác dụng: cái đầu dùng để hash key, cái sau dùng để tìm tuần tự trong dslk khi hash đụng độ.
Last edited: