2013-04-24 2 views
2

Если я попытаюсь получить sha1 из «ABC», они будут такими же, если PHP и Node.JS.Разница хэшей sha1 в PHP и Node.JS для кириллицы

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

Но если я пытаюсь взять хэш-то кириллицей, как это: «ЭЮЯЁ» они не являются.

Как это исправить?

+0

Вы использовали ту же кодировку для обоих? – Carsten

ответ

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, вы чаще сталкиваетесь с конфликтами.

Смежные вопросы