代码之家  ›  专栏  ›  技术社区  ›  maček

散列的任何子串(md5,sha1)是否比另一个更“随机”?

  •  21
  • maček  · 技术社区  · 15 年前

    下面是3个md5哈希示例

    $ md5 -s "1" && md5 -s "2" && md5 -s "3"
    MD5 ("1") = c4ca4238a0b923820dcc509a6f75849b
    MD5 ("2") = c81e728d9d4c2f636f067f89cc14862c
    MD5 ("3") = eccbc87e4b5ce2fe28308fd9f2a7baf3
    

    4 回复  |  直到 10 年前
        1
  •  20
  •   kurige    15 年前

    program 来测试这个。你需要 Crypto++ 编译代码。

    当涉及到密码学,甚至仅仅是一般的数学时,我知道的就足以击中我自己的脚。因此,对下面的结果持保留态度,并记住我对所使用的工具只有粗略的了解。

    但是,当使用较小的采样空间时,最后8位似乎更随机。采样空间越大,三个子串越接近完全随机性。


    1000次迭代:

    First:  0.995914
    Middle: 0.996546
    Last:   0.998104
    

    5000次迭代:

    First:  0.998387
    Middle: 0.998624
    Last:   0.999501
    

    10000次迭代:

    First:  0.999614
    Middle: 0.999457
    Last:   1
    

    30000次迭代:

    First:  1
    Middle: 1
    Last:   1
    

    MaurerRandomnessTest 0.632411 从古滕堡项目下载的莎士比亚的《麦克白》的副本有一个随机值 0.566991

        2
  •  13
  •   snemarch    15 年前

    挑剔:“random”在这里用错了,因为哈希函数是确定性的。

    Avalanche effect :基本上,输入的每一位都会引起输出的剧烈变化。因此,对于一个设计良好的散列,每个子串都应该同样频繁地受到影响(“ 随机的 )作为任何其他。

        3
  •  12
  •   Gintautas Miliauskas    15 年前

    一个好的hash的所有子串(尽管md5在加密上不安全,但它还是相当好的)都是同样随机的,所以是的,从字符串中取任何你喜欢的位,它们应该是均匀分布的。

        4
  •  0
  •   Kushal Ramkumar    8 年前

    测量散列函数输出的随机性可以使用在伪随机数生成器上进行的统计测试来完成。 Handbook of Applied Cryptography §5.4.4(免费提供样本章节),有五个基本测试:

    1. 串行测试(两位测试)
    2. 扑克测试
    3. 运行测试
    4. 自相关检验

    当然,还有库里格已经提到的莫雷尔的普遍统计检验。