Tôi đã tò mò bản thân mình, vì vậy tôi đã đi trước và viết một program để kiểm tra điều này. Bạn sẽ cần Crypto++ để biên dịch mã.
Tuyên bố từ chối trách nhiệm: Khi nói đến mật mã, hoặc thậm chí chỉ là toán học nói chung, tôi biết vừa đủ để tự bắn mình vào chân. Vì vậy, lấy kết quả sau đây với một hạt muối và ghi nhớ rằng tôi chỉ có một kiến thức cursory của các công cụ tôi đang sử dụng.
Tôi chỉ lấy mẫu ba chất nền: 8 byte đầu tiên, 8 byte giữa và 8 byte cuối cùng. Dài câu chuyện ngắn, họ đều bình đẳng ngẫu nhiên.
Tuy nhiên, khi sử dụng không gian mẫu nhỏ hơn, có vẻ như 8 bit cuối cùng ngẫu nhiên hơn một chút. Không gian lấy mẫu càng lớn, càng gần ba chất nền tiếp cận ngẫu nhiên hoàn toàn.
1000 lặp:
First: 0.995914
Middle: 0.996546
Last: 0.998104
5000 lặp:
First: 0.998387
Middle: 0.998624
Last: 0.999501
10000 lặp:
First: 0.999614
Middle: 0.999457
Last: 1
30000 lặp:
012.351.
First: 1
Middle: 1
Last: 1
"Ngẫu nhiên" được đo bởi lớp Crypto ++ 'MaurerRandomnessTest. Để tham khảo, tệp thực thi được biên dịch từ mã trên có giá trị ngẫu nhiên là 0.632411
và bản sao của Macbeth của Shakespeare được tải xuống từ Project Gutenburg có giá trị ngẫu nhiên là 0.566991
.
Theo tôi, "ngẫu nhiên" không phải là từ đúng ở đây. Hàm băm là xác định như chúng nhận được; không có sự ngẫu nhiên nào cả. Bạn có thể băm nhỏ có thể hỏi nếu một chuỗi con của một băm có cùng một sức đề kháng thông đồng như ban đầu (tính cho chiều dài khác nhau, tất nhiên). – Jens
Tôi sắp hỏi câu hỏi này rất rõ .. – insaner