クライアントでは、ラッパーに入れた 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'
これは私にかなりの悲しみを引き起こしました。なんてこったい?