Sự khác biệt giữa mã băm và các hàm tổng kiểm tra là, chúng được thiết kế cho các mục đích khác nhau.
Tổng kiểm tra được sử dụng để tìm hiểu xem có điều gì đó trong đầu vào đã thay đổi hay không.
Mã băm được sử dụng để tìm hiểu xem có điều gì đó trong đầu vào đã thay đổi hay không và có càng nhiều "khoảng cách" giữa các giá trị mã băm riêng lẻ càng tốt.
Ngoài ra, có thể có các yêu cầu khác đối với hàm băm, trái ngược với quy tắc này, như khả năng tạo cây / cụm / nhóm các giá trị mã băm sớm.
Và nếu bạn thêm một số ngẫu nhiên ban đầu được chia sẻ, bạn sẽ có khái niệm về mã hóa / trao đổi khóa hiện đại.
Về xác suất:
Ví dụ: giả sử rằng dữ liệu đầu vào thực sự luôn thay đổi (100% thời gian). Và giả sử bạn có một hàm băm / tổng kiểm tra "hoàn hảo", tạo ra một giá trị băm / tổng kiểm tra 1 bit. Do đó, bạn sẽ nhận được các giá trị băm / tổng kiểm tra khác nhau, 50% thời gian, cho dữ liệu đầu vào ngẫu nhiên.
Nếu chính xác 1 bit trong dữ liệu đầu vào ngẫu nhiên của bạn đã thay đổi, bạn sẽ có thể phát hiện 100% thời gian đó, bất kể dữ liệu đầu vào lớn đến mức nào.
Nếu 2 bit trong dữ liệu đầu vào ngẫu nhiên của bạn đã thay đổi, xác suất phát hiện "thay đổi" của bạn sẽ chia cho 2, vì cả hai thay đổi có thể vô hiệu hóa lẫn nhau và không có hàm băm / tổng kiểm tra nào phát hiện ra rằng 2 bit thực sự khác nhau trong dữ liệu đầu vào .
...
Điều này có nghĩa là, Nếu số lượng bit trong dữ liệu đầu vào của bạn lớn hơn nhiều lần so với số lượng bit trong giá trị băm / tổng kiểm, xác suất của bạn thực sự nhận được các giá trị băm / tổng kiểm tra khác nhau, đối với các giá trị đầu vào khác nhau, sẽ giảm xuống và không phải là không đổi .