在Mathematica中以字符串形式给出的数据的加密哈希(sha1或md5)

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中获取任意字符串的哈希值呢?

Pil*_*lsy 6

你可以通过使用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)