Почему крипто.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