#javascript #node.js #cryptography #hex #sha512
#javascript #node.js #криптография #шестнадцатеричный #sha512
Вопрос:
Я пытаюсь получить тот же результат, который я получаю в http://jssha.sourceforge.net /
где
У меня есть слово «тестирование», о котором идет речь:
var word = 'testing';
var hex = toHex(word); // '740065007300740069006e006700';
в jssha при выборе input type
как HEX со значением hex
переменной и SHA-512 я получаю следующий результат:
6e42b2c2a6351036b78384212774135d99d849da3066264983e495b5f74dc922e3d361b8ea9c8527169757233ed0bd4e56b2c42aab0a21bbcca67219dc53b472
хотя я не могу добиться того же результата с помощью криптомодуля nodejs.
require('crypto').createHash('sha512').update(hex).digest('hex')
выводит:
9ad6d9053c6c420fe61ec2fffd094e3a325bc71708e18232fd764a5eb30315e38464e620ef0b55b92fbf6c809838652a72d9412b0398b28d61ca432962451de2
Итак, мне интересно, как я могу получить тот же результат, что и jssha, используя crypto module?
Спасибо
Ответ №1:
«тестирование» в шестнадцатеричном формате равно 74657374696e67, если вы используете utf8, что в значительной степени стандартно. То, что возвращает ваш метод toHex, предполагает utf16.
Для этого хэша на веб-сайте говорится:
521b9ccefbcd14d179e7a1bb877752870a6d620938b28a66a107eac6e6805b9d0989f45b5730508041aa5e710847d439ea74cd312c9355f1f2dae08d40e41d50
Сделайте это в node.js для хэширования шестнадцатеричной строки:
require('crypto').createHash('sha512').update(
new Buffer("74657374696e67", "hex")
).digest('hex')
Узел дает вам тот же хэш. О, и это также дает вам тот же хэш:
require('crypto').createHash('sha512').update("testing").digest('hex')
Комментарии:
1. спасибо @thejh, кажется
new Buffer("74657374696e67", "hex")
, метод возвращаетсяUnknown encoding
для меня. Кроме того, есть ли какой-либо способ заставить его использовать utf-16 вместо 8. Извините, я думаю, я застрял с этой кодировкой, поскольку она из внешнего веб-сервиса.2. @ludicco: Конечно, вы можете просто сделать то же самое с шестнадцатеричной строкой utf16. «Неизвестная кодировка» связана с тем, что вы используете старую версию node, используйте 0.5.10 и измените на 0.6.0, когда она будет доступна.
3. еще раз спасибо @thejh, единственная проблема в том, что этот экземпляр запущен на heroku, и я боюсь, что сейчас они поддерживают только 0.47? в этом случае я не уверен, сможет ли метод, о котором вы упомянули, работать? если у вас есть какие-либо идеи о том, как я мог бы заставить это работать, это было бы очень ценно 😉
4. Не знаю, возможно, вы захотите спросить в #heroku о freenode.net . В качестве обходного пути вы можете использовать Buffer.fromHex из github.com/bnoordhuis/node-buffertools .
5. Сделайте
require("buffertools")
это в верхней части вашего файла и заменитеnew Buffer("74657374696e67", "hex")
наBuffer.fromHex("74657374696e67")