Как я могу получить хэш sha1 строки в node.js?

Я пытаюсь создать сервер веб-сокетов, написанный на node.js

Чтобы заставить сервер работать, мне нужно получить хеш-строку SHA1.

Что мне нужно сделать, объяснено в разделе 5.2.2, на странице 35 документы .

  

ПРИМЕЧАНИЕ. Например, если значение "Sec-WebSocket-Key"   заголовок в рукопожатии клиента был "dGhlIHNhbXBsZSBub25jZQ==", сервер добавит строку "258EAFA5-E914-47DA-95CA-C5AB0DC85B11" для формирования   строка "dGhlIHNhbXBsZSBub25jZQ==258EAFA5-E914-47DA-95CA-C5AB0DC85B11". Затем сервер получает хеш SHA-1 этой строки, давая значение 0xb3 0x7a 0x4f 0x2c 0xc0 0x62 0x4f 0x16 0x90 0xf6 0x46 0x06 0xcf 0x38 0x59 0x45 0xb2 0xbe 0xc4 0xea Затем это значение кодируется в base64, чтобы получить значение "s3pPLMBiTxaQ9kYGzzhZRbK+xOo=", которое будет возвращено   в заголовке "Sec-WebSocket-Accept".

84 голоса | спросил Eric 8 PM00000070000005231 2011, 19:02:52

4 ответа


0

См. crypto.createHash() функция и связанная с ней hash.update() и hash.digest() функции:

 var crypto = require('crypto')
  , shasum = crypto.createHash('sha1');
shasum.update("foo");
console.log(shasum.digest('hex'));
// "0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33"
ответил maerics 8 PM00000070000002131 2011, 19:10:21
0

Обязательный: SHA1 не работает , вы можете столкнуться с кредитами AWS средней когорты стартапов, но для ответа на свой вопрос:

var getSHA1ofJSON = function(input){
    return crypto.createHash('sha1').update(JSON.stringify(input)).digest('hex')
}

Тогда:

getSHA1ofJSON('whatever')

или

getSHA1ofJSON(['whatever'])

или

getSHA1ofJSON({'this':'too'})
ответил mikemaccana 18 MaramWed, 18 Mar 2015 00:14:36 +03002015-03-18T00:14:36+03:0012 2015, 00:14:36
0

Пожалуйста, прочитайте и примите во внимание мой совет в комментариях к вашему посту. При этом, если у вас все еще есть веская причина для этого, ознакомьтесь с этим списком из модули crpyto для узла. Он имеет модули для работы как с sha1, так и с base64.

ответил Alex Turpin 8 PM00000070000002431 2011, 19:11:24
0

Советы по предотвращению проблемы (плохой хеш):

  

Я обнаружил, что NodeJS хэширует UTF-8 представление строки. Другие языки (например, Python, PHP или PERL ...) хэшируют строку байта.

Мы можем добавить аргумент бинарный , чтобы использовать строку байтов.

const crypto = require("crypto");

function sha1(data) {
    return crypto.createHash("sha1").update(data, "binary").digest("hex");
}

sha1("Your text ;)");

Вы можете попробовать: "\ xac", "\ xd1", "\ xb9", "\ xe2", "\ xbb", "\ x93" и т. д.

Другие языки (Python, PHP, ...):

sha1("\xac") //39527c59247a39d18ad48b9947ea738396a3bc47

Nodejs:

sha1 = crypto.createHash("sha1").update("\xac", "binary").digest("hex") //39527c59247a39d18ad48b9947ea738396a3bc47
//without:
sha1 = crypto.createHash("sha1").update("\xac").digest("hex") //f50eb35d94f1d75480496e54f4b4a472a9148752
ответил Hors Sujet 11 J0000006Europe/Moscow 2018, 23:50:09

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132