496 Stimmen

node.js-Hash-String?

Ich habe eine Zeichenfolge, die ich hashen möchte. Was ist der einfachste Weg, um den Hash in node.js zu generieren?

Der Hash dient der Versionskontrolle, nicht der Sicherheit.

970voto

braitsch Punkte 13754

Wenn Sie nur einen md5-Hash für eine einfache Zeichenkette erstellen möchten, habe ich festgestellt, dass dies für mich funktioniert.

var crypto = require('crypto');
var name = 'braitsch';
var hash = crypto.createHash('md5').update(name).digest('hex');
console.log(hash); // 9b74c9897bac770ffc029102a200c5de

267voto

dertkw Punkte 7678

Werfen Sie einen Blick auf crypto.createHash(Algorithmus)

var filename = process.argv[2];
var crypto = require('crypto');
var fs = require('fs');

var md5sum = crypto.createHash('md5');

var s = fs.ReadStream(filename);
s.on('data', function(d) {
  md5sum.update(d);
});

s.on('end', function() {
  var d = md5sum.digest('hex');
  console.log(d + '  ' + filename);
});

88voto

pvorb Punkte 6786

Die Krypto-Modul-API von Node ist immer noch instabil.

Ab der Version 4.0.0 ist das native Crypto-Modul nicht mehr instabil. Vom offizielle Dokumentation :

Krypto

Stabilität: 2 - Stabil

Die API hat sich als zufriedenstellend erwiesen. Die Kompatibilität mit dem npm-Ökosystem hat hohe Priorität und wird nur dann gebrochen, wenn es absolut notwendig ist.

Daher sollte es als sicher angesehen werden, die native Implementierung ohne externe Abhängigkeiten zu verwenden.

Als Referenz wurden die unten genannten Module als alternative Lösungen vorgeschlagen, als das Crypto-Modul noch instabil war.


Sie können auch eines der folgenden Module verwenden sha1 o md5 die beide die Aufgabe erfüllen.

$ npm install sha1

und dann

var sha1 = require('sha1');

var hash = sha1("my message");

console.log(hash); // 104ab42f1193c336aa2cf08a2c946d5c6fd0fcdb

o

$ npm install md5

und dann

var md5 = require('md5');

var hash = md5("my message");

console.log(hash); // 8ba6c19dc1def5702ff5acbf2aeea5aa

(MD5 ist unsicher, wird aber häufig von Diensten wie Gravatar verwendet).

Die API dieser Module wird sich nicht ändern!

31voto

chickens Punkte 14182

Einfache Einzeiler:

Wenn Sie einen UTF8-Text-Hash wünschen:

const hash = require('crypto').createHash('sha256').update('Hash me', 'utf8').digest('hex');

Wenn Sie den gleichen Hash mit Python, PHP, Perl, Github erhalten möchten:

const hash = require('crypto').createHash('sha256').update('Hash me', 'binary').digest('hex');

Sie können auch ersetzen 'sha256' con 'sha1' , 'md5' , 'sha256' , 'sha512'

30voto

Sky Voyager Punkte 11257
sha256("string or binary");

Ich hatte Probleme mit einer anderen Antwort. Ich rate Ihnen, das Argument Kodierung auf binary den Byte-String zu verwenden und unterschiedliche Hash-Werte zwischen Javascript (NodeJS) und anderen Sprachen/Diensten wie Python, PHP, Github... zu verhindern.

Wenn Sie diesen Code nicht verwenden, können Sie einen anderen Hash zwischen NodeJS und Python erhalten...

Wie man den gleichen Hash, dass Python, PHP, Perl, Github (und verhindern, dass ein Problem) zu bekommen :

NodeJS hasht die UTF-8-Darstellung der Zeichenkette. Andere Sprachen (wie Python, PHP oder PERL...) hashen den Byte-String.

Wir können hinzufügen バイナリ Argument, um die Byte-Zeichenkette zu verwenden.

Code:

const crypto = require("crypto");

function sha256(data) {
    return crypto.createHash("sha256").update(data, "binary").digest("base64");
    //                                               ------  binary: hash the byte string
}

sha256("string or binary");

Dokumentation:

  • crypto.createHash(Algorithmus[, Optionen]): Der Algorithmus hängt von den verfügbaren Algorithmen ab, die von der Version von OpenSSL auf der Plattform unterstützt werden.
  • hash.digest([Kodierung]): Die Kodierung kann "hex", "latin1" oder "base64" sein. (base64 ist weniger lang).

Sie erhalten das Problem mit: sha256(" \xac "), " \xd1 ", " \xb9 ", " \xe2 ", " \xbb ", " \x93 ", usw...

  • Andere Sprachen (wie PHP, Python, Perl...) und meine Lösung mit .update(data, "binary") :

      sha1("\xac") //39527c59247a39d18ad48b9947ea738396a3bc47
  • Nodejs standardmäßig (ohne Binary) :

      sha1("\xac") //f50eb35d94f1d75480496e54f4b4a472a9148752

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X