it-swarm.com.de

Wie kann ich den sha1-Hash einer Zeichenfolge in node.js abrufen?

Ich versuche, einen Websocket-Server zu erstellen, der in node.js geschrieben ist

Damit der Server funktioniert, muss der SHA1-Hash einer Zeichenfolge abgerufen werden.

Was ich tun muss, wird in Abschnitt 5.2.2 Seite 35 der Dokumentation erklärt.

HINWEIS: Wenn der Wert des Headers "Sec-WebSocket-Key" Im Handshake des Clients beispielsweise "dGhlIHNhbXBsZSBub25jZQ==" Wäre, würde der Server den String "258EAFA5-E914-47DA-95CA-C5AB0DC85B11" Anhängen, um die Zeichenfolge "dGhlIHNhbXBsZSBub25jZQ==258EAFA5-E914-47DA-95CA-C5AB0DC85B11" Zu bilden. ]. Der Server würde dann den SHA-1-Hash dieser Zeichenfolge verwenden und den Wert 0xb3 0x7a 0x4f 0x2c 0xc0 0x62 0x4f 0x16 0x90 0xf6 0x46 0x06 0xcf 0x38 0x59 0x45 0xb2 0xbe 0xc4 0xea angeben. Dieser Wert wird dann base64-codiert, um den Wert "s3pPLMBiTxaQ9kYGzzhZRbK+xOo=" Zu erhalten, der im Header "Sec-WebSocket-Accept" Zurückgegeben würde.

93
Eric

Siehe die crypto.createHash() function und die zugehörigen hash.update() und hash.digest() Funktionen :

const crypto = require('crypto')
  , shasum = crypto.createHash('sha1');
shasum.update('foo');
console.log(shasum.digest('hex'));
// "0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33"
215
maerics

Obligatorisch: SHA1 ist defekt, Sie können Kollisionen mit den AWS-Credits der durchschnittlichen Startbeschleunigerkohorte erstellen, aber um Ihre Frage zu beantworten:

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

Dann:

getSHA1ofJSON('whatever')

oder

getSHA1ofJSON(['whatever'])

oder

getSHA1ofJSON({'this':'too'})
21
mikemaccana

Bitte lies und beachte meinen Rat in den Kommentaren deines Beitrags. Wenn Sie dennoch einen guten Grund dazu haben, lesen Sie diese Auflistung von crpyto-Modulen für Node. Es verfügt über Module für den Umgang mit sha1 und base64.

8
Alex Turpin

Tipps zur Vermeidung von Problemen (fehlerhafter Hash):

Ich habe festgestellt, dass NodeJS die UTF-8-Darstellung des Strings hasht. Andere Sprachen (wie Python, PHP oder Perl ...)) hacken den Byte-String.

Wir können das Argument binär hinzufügen, um die Byte-Zeichenfolge zu verwenden.

const crypto = require("crypto");

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

sha1("Your text ;)");

Sie können versuchen mit: "\ xac", "\ xd1", "\ xb9", "\ xe2", "\ xbb", "\ x93", etc ...

Andere Sprachen (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
4
A-312