【发布时间】:2013-11-19 01:53:34
【问题描述】:
在我使用 Rusha 的客户端上,我已将其放入包装器中:
function cSHA1(m){
return (new Rusha).digest(m);
}
在服务器上我使用的是 Node 的原生 crypto 模块,
function sSHA1(m){
var h = crypto.createHash('sha1');
h.update(m);
return h.digest('hex');
}
让我们试试吧:
cSHA1('foo')
"0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33"
sSHA1('foo')
'0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33'
cSHA1('bar')
"62cdb7020ff920e5aa642c3d4066950dd1f01f4d"
sSHA1('bar')
'62cdb7020ff920e5aa642c3d4066950dd1f01f4d'
到目前为止,一切都很好。
现在让我们给他们扔一个曲线球...
cSHA1(String.fromCharCode(10047))
"5bab61eb53176449e25c2c82f172b82cb13ffb9d"
sSHA1(String.fromCharCode(10047))
'5bab61eb53176449e25c2c82f172b82cb13ffb9d'
好的,好的。
我有一个字符串,我如何得到它应该不重要,而且这是一个很长的故事,但是:
s.split('').map(function(c){
return c.charCodeAt();
})
在两个地方产生完全相同的结果:
[58, 34, 10047, 32, 79]
现在,让我们对其进行哈希处理:
s
":"✿ O"
cSHA1(s)
"a199372c8471f35d14955d6abfae4ab12cacf4fb"
s
':"? O'
sSHA1(s)
'fc67b1e4ceb3e57e5d9f601ef4ef10c347eb62e6'
这让我很伤心;什么鬼?
【问题讨论】:
-
加密函数的输入到底是什么?他们得到完整的
map作为输入吗? -
非常抱歉,我绝对应该更清楚地说明这一点......我会通过编辑来解决它。
-
@BastiM thereya go... :)
-
看起来两边的哈希值都是正确的,但是你的输入字符串不同!
":"✿ O" != ':"? O'所以我宁愿检查你的字符串的传输和双方的编码,而不是想知道哈希有什么不同 -
@BastiM 非常有趣... 是
?的正确哈希值。但是在节点 repl 中,如果我输入:s.charCodeAt(2),我会得到:10047。那么 SHA1 函数如何获取?的值呢?
标签: javascript node.js unicode hash sha1