Mathematica 中以字符串形式给出的数据的加密哈希(sha1 或 md5)
“abc”的 sha1 哈希是
a9993e364706816aba3e25717850c26c9cd0d89d
让 Mathematica 告诉您其 Hash
函数的唯一方法是
Hash[abc, "SHA"] // IntegerString[#, 16]&
(IntegerString 只是像大多数实现一样以十六进制输出它。)
请注意,
Hash["abc", "SHA"]
给出“abc”的哈希值——不是你想要的! 事实上,我们能够获得正确的“abc”散列的唯一原因是符号 abc
的 Mathematica 表示恰好是字符串“abc”。 对于绝大多数字符串来说,情况并非如此。
那么如何在 Mathematica 中获取任意字符串的哈希值呢?
The sha1 hash of "abc" is
a9993e364706816aba3e25717850c26c9cd0d89d
The only way to get Mathematica to tell you that with its Hash
function is
Hash[abc, "SHA"] // IntegerString[#, 16]&
(The IntegerString thing is just to output it in hex like most implementations do.)
Note that
Hash["abc", "SHA"]
gives the hash of "\"abc\"" -- not what you want!
In fact, the only reason we could get the correct hash of "abc" was because the Mathematica representation of the symbol abc
happens to be the string "abc".
For the vast majority of strings, this will not be the case.
So how do you take the hash of an arbitrary string in Mathematica?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
通过使用 StringToStream 以及 FileHash 可以将输入流作为参数,您可以不那么笨拙地完成此操作。那么你的 sha1 函数就变成了:
You can do it less kludgily by using
StringToStream
and the fact thatFileHash
can take an input stream as an argument. Then yoursha1
function becomes:这是一个有效的组合。将字符串写入临时文件并使用
FileHash
:您可能还想
在上述函数中定义并返回
hex@hash
。Here's a kludge that works. Write the string to a temp file and use
FileHash
:You might also want to define
and return
hex@hash
in the above function.