Làm thế nào một tệp văn bản byte bằng 0 có thể tạo ra một hàm băm khi được băm với sha1sum, sha256sum, v.v. Dữ liệu nào là chương trình băm để tạo giá trị băm?
Ta
Làm thế nào một tệp văn bản byte bằng 0 có thể tạo ra một hàm băm khi được băm với sha1sum, sha256sum, v.v. Dữ liệu nào là chương trình băm để tạo giá trị băm?
Ta
Câu trả lời:
Các thuật toán băm đọc đầu vào và xử lý nó, bất kể có dữ liệu nào không. Đây là một hành vi hợp lệ và mong muốn và thậm chí được sử dụng để xác minh nếu một triển khai nhất định là chính xác. Điều này dẫn đến "null-băm" cho tất cả các thuật toán chính.
Tóm lại: da39a3ee5e6b4b0d3255bfef95601890afd80709 là sha1-hash cho một tệp trống ở mọi nơi, điều tương tự cũng đúng với băm null của các thuật toán khác.
Tất cả các thuật toán băm trong Quick Hash là các cấu trúc Merkle của Damgård . Như vậy, họ đệm thông điệp đến bội số của kích thước khối.
Các thuật toán của Quick Hash đạt được điều này bằng cách nối thêm một 1
bit, càng nhiều 0
bit càng cần thiết, và cuối cùng là độ dài tin nhắn.
Điều này cho phép băm các tin nhắn có độ dài tùy ý, bao gồm các tin nhắn có độ dài bằng không.
(Bổ trợ cho câu trả lời của Dennis và fixer1234?)
Ngắn gọn:
$ shasum -a 256 /dev/null
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 /dev/null
Tất cả các tệp 0 byte sẽ có cùng một tổng kiểm tra.
$ shasum -a 512 /dev/null
cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e /dev/null
$ shasum /dev/null
da39a3ee5e6b4b0d3255bfef95601890afd80709 /dev/null
$ md5 /dev/null
MD5 (/dev/null) = d41d8cd98f00b204e9800998ecf8427e
(lưu ý: MD5 bị hỏng; đây không phải là 'hàm băm an toàn'. Điều này được ghi lại trong mục MD5 trong Wikipedia.)
Do đó, ví dụ, nếu bạn đang cố xác minh tính vô hại của các tệp tại virustotal.com bằng một trong các giá trị băm an toàn được liệt kê ở đây, ví dụ: da39a3ee5e6b4b0d3255bfef95601890afd80709
bạn có thể tin rằng tệp thực sự là 0 byte (hoặc là một thư mục, virustotal, khó hiểu, băm như thể đó là tệp 0 byte.)