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.
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.
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
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);
});
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!
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'
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...
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:
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 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.