Ý nghĩa của hash trong deduplication

Mn cho em hỏi “hash” là gì mà khi chạy ra kết quả là một số em cũng không hiểu nữa?

  • Hash dịch theo tiếng việt là hàm băm. Là các dạng thuật toán để mã hóa các khối dữ liệu thường là dữ liệu lớn. Còn tùy thuộc vào đó là hàm hash nào mà sẽ cho ra kết quả là 1 số hay một chuỗi hay là kết hợp cả chuỗi lần số (cũng có thể là nhiều kiểu dữ liệu nữa).
  • Ví dụ: so sánh 2 đoạn văn bản mỗi văn bản hơn 1 triệu từ. Nếu so sánh trực tiếp 2 đoạn văn bản thì nó sẽ tốn rất nhiều chi phí và thời gian. Ở đây người ta sẽ hash 2 đoạn văn bản đó và so sánh 2 mã hash với nhau.

Mình thấy chưa hẳn như vậy :smiley: vì đọc hết cả file rồi hash thì chắc chắn là lâu hơn so với việc đọc mấy trăm byte đầu. Mà đọc hết file chiếm (rất) nhiều thời gian so với phần hash.

Để tiết kiệm gì gì đó thì đã phải tính sẵn hash từ trước, rồi chỉ cần tính hash mới. Như VirusTotal chẳng hạn, hash bên client trước rồi mới lên lookup.

1 Like

Giả sử bạn có 1000 text file không giống nhau, mỗi text file có cỡ 1gb text. Chỉ cần 2 text mà có 1 từ khác nhau thôi, nó cũng sẽ được coi là khác nhau.

Có người đưa cho bạn 1 cái text file mới, bạn phải kiểm tra coi bạn có nó chưa. Bạn có thể làm như vậy bằng cách so sánh cái text mới với từng cái text mà bạn đang có, so sánh từng byte, vì như mình nói trên, chỉ 1 ký tự khác, nó cũng sẽ khác. Công việc này nó rất là tốn thời gian đúng không? Bạn có thể check 1000 file, nhưng nếu bạn có 1000000000 file thì sao?

Thay vì vậy, bây giờ mỗi lần bạn có một text file, bạn hash nó, nói nôm na, bạn sẽ ra dc 1 cái hash string. Nếu 2 text file mà khác nhau, nó sẽ (gần như*) luôn luôn cho 2 cái hashstring khác nhau. Rồi bạn dùng 1 table để giử mấy cái sô hash đó lại. Bây giờ, mỗi lần có người đưa cho bạn 1 cái text file, bạn lấy sô hash của nó, xong rồi bạn kiếm xem bạn có cái hash đó chưa là xong. Không có cần phải đi kiểm tra từng file chữ từng chữ.

*Mình nói gần như là bởi vì 2 file khác nhau vẫn có thể cho ra cái hash giông nhau, nhưng tỷ lệ rất rất rất thấp. Nếu bạn dùng MD5, tỹ lệ nó ra được giống nhau là 2^(-128).

2 Likes

Mình ko hiểu ý bạn. Thuật toán hash chắc chắn ko lâu vì nó làm việc với các bit dữ liệu và nó sinh ra để làm các công việc như vậy. Có phải đọc file đâu nhỉ. Còn so sánh chỉ cần 2 đoạn mỗi đoạn 1000 chữ thôi (ko cần đến từ), tính đơn gản 1000x1000 = 1tr phép tính.

ko phải từ đâu b, mà là từng kí tự =)))

Bạn không đọc dữ liệu vào từ file thì hash cái gì đây :smiley:

Đúng vậy, nếu đã có sẵn hash db thì tính xong rồi lookup, nhưng lấy hai file bất kì so với nhau thì không nên. Vì đã hash là phải đọc hết.

1 Like

Mình muốn nói thêm một VD quan trọng của hash dùng trong security nữa.

VD như khi bạn tạo password cho DNH, cái trang này sẽ tạo một cái hash của cái pw mà bạn chọn rồi save nó vào database. Rồi khi bạn đăng nhập, nó sẽ tạo cái hash rồi so sánh cái hash đó với cái hash mà nó store để check cái pw của bạn có đúng không. Làm như vậy, trang DNH sẽ không biết pw của bạn. Khi đó, giả sữ có một bạn mod nào đó người xấu (sorry mấy bạn mod :heart_eyes: ), hoặc có hacker coi dc cái database pw của DNH, họ muốn kiếm pw của bạn họ cũng không coi đc bởi vì họ chỉ có thể thấy cái hash của pw của bạn chứ không coi dc pw của bạn. Cái hash của cái hash không có ra dc cái hash trong database nên họ vẫn không thể đăng nhập vào acc.

2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?