2016-07-29 27 views
2

Ich habe mit folgendem Problem konfrontiert: Ich versuche, eine Zeichenfolge str in md5 bytestring hash zu konvertieren. In PHP können wir md5(str, true) verwenden, aber in JS (nodejs express) kann ich keinen Weg finden, das gleiche Ergebnis zu erhalten. Ich habe npm Modul js-md5 eingeschlossen, aber arrayBuffer Methode dieses Moduls gibt ein anderes Ergebnis zurück (unterscheidet sich von PHP md5 (str, wahr)).NodeJS md5 'bytestring' wie PHP md5 (str, true)

Könnte mir bitte jemand helfen.

Dank

Antwort

0

Verwendung CryptoJS Modul: NPM link here

Und so etwas wie:

// Requires 
var crypto = require('crypto'); 

// Constructor 
function Crypto() { 
    this.hash; 
} 

// Hash method 
Crypto.prototype.encode = function(data) { 
    this.hash = crypto.createHash('md5').update(data); 
    var result = this.hash.digest('hex'); 
    return result; 
}; 

// Comparison method (return true if === else false) 
Crypto.prototype.equals = function(data, model) { 
    var bool = false; 
    var data = data.toUpperCase(); 
    var model = String(model).toUpperCase(); 
    if (data == model){ 
     bool = true; 
    } else { 
     bool = false; 
    } 
    return bool; 
}; 

// Exports 
module.exports = Crypto; 

Dann instanziiert dieses "Werkzeug" Objekt in Ihrem Code und Methoden anwenden.
Einfach wie Kuchen, und das gleiche kann mit anderen Verschlüsselungsmethoden wie AES, SHA256, etc.
Über die Option raw_output (binäre Antwort, gepolstert auf 16 Bits) können Sie einfach die zurückgegebene var im Binärformat mit konvertieren eine einfache Funktion, siehe this SO post um zu wissen, wie. Viel Spaß.

0

Kurze Antwort:

const crypto = require('crypto'); 
const buffer = crypto.createHash('md5').update(str).digest(); 

Lange Antwort: Sie benötigen NodeJS‘default crypto Modul (keine Notwendigkeit für eine Abhängigkeit hier) zu verwenden, die Nutzenfunktion und Klassen enthält. Es ist in der Lage, Hashes (zum Beispiel MD5 oder SHA-1-Hashes) für Sie mit synchronen oder asynchronen Methoden zu erstellen. Eine kurze Dienstprogrammfunktion namens crypto.createHash(algorithm) ist nützlich, um einen Hash mit minimaler Codierung zu erstellen. Wie the docs spezifiziert:

Die algorithm ist abhängig von den zur Verfügung stehenden Algorithmen, die von der Version von OpenSSL auf der Plattform unterstützt. Beispiele sind 'sha256', 'sha512' usw. In den letzten Versionen von OpenSSL werden openssl list-message-digest-algorithms die verfügbaren Digest-Algorithmen anzeigen.

Nun, diese createHash Funktion gibt ein Hash Objekt, das mit einem Strom verwendet werden kann (man kann ihm füttern, eine Datei, HTTP-Anforderung, etc.) oder eine Zeichenfolge, wie Sie gefragt. Wenn Sie eine Zeichenfolge verwenden möchten, verwenden Sie hash.update(string), um sie zu hashen. Diese Methode gibt den Hash selbst zurück, sodass Sie ihn mit .digest(encoding) verketten können, um eine Zeichenfolge zu generieren (wenn encoding festgelegt ist) oder Buffer (falls nicht). Da Sie nach Bytes gefragt haben, glaube ich, dass eine Buffer ist, was Sie wollen (Buffer s sind Uint8Array Instanzen).

+0

Sie haben absolut Recht, ich schrieb dies in Eile und vergaß es. Bitte lass mich meine Antwort bearbeiten. – Iso

+0

Da Ihre Antwort jetzt viel besser ist als die alte, habe ich meinen vorherigen Kommentar entfernt. Danke ;). Zusätzliche Informationen: Versuchen Sie nicht, einen Hash zweimal zu verdauen oder Sie haben einen Fehler. Ein Hash muss nur einmal verdaut werden. Und wenn Sie beispielsweise zwei Passwörter vergleichen, achten Sie auf den Typ des Objekts (wahrscheinlich eine Zeichenfolge, wenn es von einer Eingabe kommt, aber ein Objektattribut, wenn es von einem Objekt wie der Ergebnismenge einer Datenbank kommt) "Methode (inspiriert durch .equals() in Java). – Aethyn