Những gì bạn đang làm không phải là "mã hóa", mỗi lần; đó là "băm". Sự khác biệt chính giữa hai loại này là mã hóa có thể đảo ngược dễ dàng (dĩ nhiên là có khóa chính xác), trong khi băm được thiết kế cực kỳ khó đảo ngược trong mọi trường hợp ngoài việc biết thông điệp gốc ở vị trí đầu tiên.
Về lý thuyết, băm mô phỏng một "nhà tiên tri ngẫu nhiên", một homunculus giả thuyết với bộ nhớ eidetic và cách tạo ra các số hoàn toàn ngẫu nhiên, hoàn toàn ngẫu nhiên không có giới hạn phạm vi trên. Bạn sẽ gửi cho người đàn ông nhỏ bé này một thông điệp và một trong hai điều sẽ xảy ra; hoặc là anh ta chưa bao giờ nhìn thấy tin nhắn trước đó, trong trường hợp anh ta tạo ra một số ngẫu nhiên mới và đưa nó cho bạn dưới dạng thông báo, hoặc anh ta đã thấy tin nhắn đó trước đó, và vì vậy anh ta nhớ và đưa cho bạn số anh ta tạo ra khi nhìn thấy nó lần đầu tiên. Trong mô hình lý thuyết đó, không có mối quan hệ nào giữa thông điệp và thông báo của nó và không có số nào xuất hiện hai lần từ RNG, không có khả năng xảy ra xung đột.
Thật không may, chúng ta không có một nhà tiên tri ngẫu nhiên lý tưởng; ý tưởng có những điều không thể thực tế đối với việc triển khai kỹ thuật số, chẳng hạn như khả năng của nhà tiên tri lưu trữ hiệu quả và nhớ lại mọi thông điệp từng được băm bởi bất cứ ai ở bất cứ đâu và khả năng của khách hàng chấp nhận một số có thể là hàng trăm hoặc hàng nghìn chữ số thập phân theo chiều dài Thay vào đó, chúng ta có các hàm băm, là các phép toán không thể đảo ngược (một chiều) hoạt động trên chính thông điệp, để tạo ra một phép biến đổi xác định (cùng một thông điệp => cùng một hàm băm) mà không rõ ràngmối quan hệ giữa hàm băm và thông điệp ban đầu. Như đã đề cập trong các bình luận, cũng không nên có sự thay đổi có thể dự đoán được đối với giá trị băm được tạo ra bằng cách thực hiện các thay đổi có hệ thống đối với thông báo; lý tưởng là, mỗi bit của thông báo sẽ có 50% cơ hội để thay đổi, được thay đổi thành một bit của tin nhắn.
Có nhiều cách sử dụng cho hàm băm; chúng được sử dụng để xác minh thách thức (nghĩ rằng thông tin đăng nhập như mật khẩu) mà không cần cả hai bên phải biết bí mật văn bản đơn giản và chúng được sử dụng làm tổng kiểm tra để xác minh rằng thư đã bị giả mạo hoặc bị hỏng. Chúng cũng được sử dụng trong các tình huống được gọi là "bằng chứng công việc"; nhiệm vụ tính toán khó hoàn thành nhưng dễ xác minh.
Nếu bạn đã từng tìm cách đảo ngược hiệu quả mã hóa băm SHA256 để tạo ra một thông điệp (bất kỳ tin nhắn nào) sẽ dẫn đến hàm băm đó, thì đó sẽ là một bằng chứng chứng minh rằng trên thực tế, hàm băm bị phá vỡ cơ bản. Trên thực tế, SHA256 được cho là an toàn, có nghĩa là không có phương pháp tài liệu nào, dù thực tế đến đâu, để bắt đầu với một bản tóm tắt băm và tạo ra một thông điệp va chạm đòi hỏi ít công việc hơn là chỉ đơn giản là thử mọi khả năng (đối với SHA-256 là lý tưởng 2 ^ 256 ~ = 10 ^ 77 khả năng).