Почему крипто.createHash возвращает другой вывод в новой версии?

у меня есть узел.JS модуль, который использует crypto.createHash для создания md5 хэш.

недавно я заметил, что хэш генерируется crypto модуль отличается в новой версии:

код

require('crypto').createHash('md5').update('¥').digest('hex')

узел.с JS версии v0.10.0

выходы: ab3af8566ddd20d7efc9b314abe90755

узел.js v6.1.0

выходы: 07625e142e4ac5961de57472657a88c1

вопрос

мне было интересно, что вызывает это в новой версии и как я могу это решить?

обновление

похожие проблемы на GitHub:

2 ответов


некоторые входы в узле v6 + вычисляют другой хэш, чем предыдущие версии узла.

в основном, когда вы передаете строку .update(), С версиями узлов до v6 кодировка по умолчанию была binary, но для узла v6, который изменился на utf-8.

например, возьмите этот код:

require('crypto').createHash('md5').update('¥').digest('hex')

выводит ab3af8566ddd20d7efc9b314abe90755 на узле pre-6 и 07625e142e4ac5961de57472657a88c1 на узле 6.

если вы хотите, чтобы узел 6 выводил то же самое, что и версии pre-6, Вы должны сказать .update() использовать binary кодировка:

require('crypto').createHash('md5').update('¥', 'binary').digest('hex')

или наоборот (сделайте вывод узла pre-6 таким же, как 6):

require('crypto').createHash('md5').update('¥', 'utf-8').digest('hex')

Так же, как отметьте эту проблему в github: https://github.com/nodejs/node/issues/6813 это кодировка по умолчанию для дайджестов, которая была изменена на utf8 в v5 / v6 и в v4 и ранее это было binary