2013-04-24 30 views
2

如果我试图从“ABC”中获取sha1,那么它们是相同的,如果PHP和Node.JS.PHP中的sha1哈希和西里尔文中的Node.JS的区别

function sha1(input) { 
    return crypto.createHash('sha1').update(input).digest('hex'); 
}; 

但是,如果我尝试采用像这样的西里尔文的哈希值:“ЭЮЯЁ”他们不是。

如何解决?

+0

你对两者使用相同的编码吗? – Carsten 2013-04-24 20:09:14

回答

4

问题很可能是character set/encodings aren't matching

如果在PHP中的字符串是UTF-8编码,可以反映在Node.js的指定'utf8'

function sha1(input) { 
    return crypto.createHash('sha1').update(input, 'utf8').digest('hex'); 
}; 
> crypto.createHash('sha1').update('ЭЮЯЁ').digest('hex') 
'da7f63ac9a3b5c67c8920871145cb5904f3df29a' 
> crypto.createHash('sha1').update('ЭЮЯЁ', 'utf8').digest('hex') 
'f78c3521413a8321231e35665f8c4a16550e182a' 

'ABC'会因为这些匹配的更好的机会都是ASCII个字符,ASCII是许多其他字符集的起点。当你超越ASCII时,你会更经常遇到冲突。