dre*_*ves 5 hash cryptography wolfram-mathematica
"abc"的sha1哈希是
a9993e364706816aba3e25717850c26c9cd0d89d
Run Code Online (Sandbox Code Playgroud)
让Mathematica告诉你它的Hash功能的唯一方法是
Hash[abc, "SHA"] // IntegerString[#, 16]&
Run Code Online (Sandbox Code Playgroud)
(IntegerString就像大多数实现一样以十六进制输出它.)
注意
Hash["abc", "SHA"]
Run Code Online (Sandbox Code Playgroud)
给出了"\"abc \""的哈希 - 不是你想要的!事实上,我们获得正确的"abc"哈希的唯一原因是因为符号的Mathematica表示abc恰好是字符串"abc".对于绝大多数字符串,情况并非如此.
那么如何在Mathematica中获取任意字符串的哈希值呢?
你可以通过使用StringToStream以及FileHash可以将输入流作为参数的事实来减少kludgily .然后你的sha1功能变成:
sha1[s_String] := Module[{stream = StringToStream[s], hash},
hash = FileHash[stream,"SHA"];
Close[stream];
hash]
Run Code Online (Sandbox Code Playgroud)