Wolfram 语言

展示散列函数的雪崩效应

散列函数在现代密码学中有重要作用。好的散列函数的一个重要且理想的特征是输入和输出没有相关性,或称为雪崩效应,这意味着输入的微小变化会导致输出发生显著变化,使其统计上看起来与随机变化没有差别。Hash 函数可以生成各种散列并以多种格式返回它们,因而我们可以很容易地对散列属性进行研究。

平均来说,如果翻转输入中的一个位元导致输出的一半位元发生变化,则称散列函数展现出雪崩效应。下面的例子将检查 "Keccak256" Hash 函数是否具有此属性。

生成 10,000 个随机 256-bit 整数的列表。

定义一个函数,翻转整数中一个随机位元。

创建一对仅相差一个位元的整数。

随机翻转整数中一个位元。

查看每对整数的 HammingDistance 正好为 1。

要想对整数的实际位元进行哈希,需要将每个整数转换为 ByteArray

用 "Keccak256" 哈希函数对字节数组进行 Hash

计算每对整数的 Hamming 距离。

计算平均 Hamming 距离。

请注意,此处的平均值 128 与比较随机整数对时相同,表明 "Keccak256" 非常有效地打乱了它的输入。

计算标准偏差。

绘制距离和相应的具有算出的平均值和标准偏差的正态分布的 PDF 的直方图。

相关范例

de en es fr ja ko pt-br