哈希函数特性
在这一步中,你将使用 openssl 命令行工具来探索哈希函数的两个核心特性:确定性(deterministic)和雪崩效应(avalanche effect)。如果一个函数对于相同的输入总是产生相同的输出,那么它就是确定性的。雪崩效应意味着输入中微小的变化会导致输出哈希值完全不同。
首先,让我们为字符串 "hello" 生成一个 SHA-256 哈希值。我们将使用 echo 命令将该字符串传递给 openssl。
echo -n "hello" | openssl dgst -sha256
echo 中的 -n 标志很重要;它防止 echo 在字符串末尾添加一个换行符,否则会改变最终的哈希值。
你应该会看到类似以下的输出:
SHA2-256(stdin)= 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
现在,我们再次运行完全相同的命令来演示确定性。
echo -n "hello" | openssl dgst -sha256
注意输出是完全相同的。这证实了对于相同的输入,SHA-256 哈希值总是相同的。
SHA2-256(stdin)= 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
接下来,我们演示雪崩效应。我们将对输入字符串做一个非常小的改动——将 "hello" 改为 "Hello"(首字母大写)。
echo -n "Hello" | openssl dgst -sha256
观察新的哈希值:
SHA2-256(stdin)= 185f8db32271fe25f561a6fc938b2e264306ec304eda518007d1764826381969
将此哈希值与 "hello" 的哈希值进行比较。尽管输入的改变非常微小(仅改变了第一个字母的大小写),但产生的哈希值却完全不同。这就是雪崩效应的体现,也是安全哈希函数的一个关键特性。