2016-06-18 18 views
0

Ich versuche, die Prüfsumme/Hash von einem Dateiupload auf meiner Webseite zu bekommen.So berechnen Sie die Prüfsumme einer Datei im Browser und erhalten die gleichen Ergebnisse wie von Windows-Eingabeaufforderung

Ich bin derzeit in der Lage, die Datei über meinen Browser hochzuladen und dann den Hash mit der cryptothek node.js zu berechnen. Ich konvertiere zuerst den Blob in eine Daten-URL.

export function calculateHash(dataUrl, type){ 

    const sha1sum = crypto.createHash('sha1').update(dataUrl).digest("hex"); 
    console.log('Hash sum is ' + sha1sum); 

} 

Ergebnis: 66b8bdd2d1d49f708722c15b26409bc072096697

Wenn i den Hash manuell von der Windows-Eingabeaufforderung mit dem folgenden Befehl berechnen ..

fciv.exe 1_1.wav -sha1 

Ergebnis: b06071b13a1b50cd2976ed7bb4180f6963e8db8e

I würde es mögen e, um das gleiche Prüfsummenergebnis von der Daten-URL in meinem Browser zu bekommen, wie es die manuelle Prüfung von der Eingabeaufforderung aus macht.

Ist das möglich?

+0

Der Code, den Sie hier vorgestellt habe, ist aus node.js' Krypto-Modul. Das hat nichts mit einem Browser oder [cryptojs] zu tun! Da dies Servercode zu sein scheint, wie nennst du deine 'calculateHash' Funktion? Was sind die Eingaben für diese Funktion? Kannst du ein paar Beispiele geben? Dies ist im Grunde der gleiche Kommentar wie ein [Kommentar] (http://stackoverflow.com/questions/37849779/how-to-calculate-the-sha1-hash-of-a-blob-using-node-js-crypto# Kommentar63194752_37849779) zu Ihrer früheren Frage. –

+0

Der Code von Node.js wird auf dem Server ausgeführt und kommuniziert nur über Anfragen mit dem Browser. Welche Art von Anfragen verwenden Sie? Haben Sie gelesen [Was ist der Unterschied zwischen clientseitiger und serverseitiger Programmierung?] (Http://stackoverflow.com/q/13840429/1816580) –

Antwort

2

Eine Daten-URL sieht wie data:image/png;base64,<BASE-64 DATA> aus. Sie müssten den BASE-64-DATA-Teil extrahieren, base64 decodieren und dann Ihren Hashing-Algorithmus ausführen. Oder - wenn Sie den Hashing im Browser ausgeführt werden soll - mit dem Filereader API:

function calculateHash(file, callback) { 
 
    let reader = new FileReader(); 
 
    reader.onload = function(event) { 
 
    let file_sha1 = sha1(reader.result); 
 
    callback(file_sha1); 
 
    }; 
 
    reader.readAsArrayBuffer(file); 
 
} 
 

 
let input = document.getElementById("input-file"), 
 
    info = document.getElementById("info"); 
 

 
input.addEventListener("change", function(event) { 
 
    let file = input.files[0]; 
 
    
 
    if (file) { 
 
    calculateHash(file, function(file_sha1) { 
 
     info.textContent = file_sha1; 
 
    }); 
 
    } 
 
});
<script src="https://raw.githubusercontent.com/emn178/js-sha1/master/build/sha1.min.js"></script> 
 

 
<input id="input-file" type="file"> 
 
<div id="info"></div>

Benötigt js-sha1 (npm install js-sha1).

Credit: How to checksum the file to be uploaded with javascript?

+0

Können Sie erklären, was Sie hier tun können: reader.onload = function (Ereignis) { var contents = event.target.result; // Hash Ihre Inhalte hier ... info.textContent = Inhalt; } – user1526912

+0

* "Ich möchte das gleiche Prüfsummenergebnis von der Daten-URL in meinem Browser erhalten" * - meine Antwort lautet: Verwenden Sie nicht die Daten-URL, sondern den Dateiinhalt, um die Prüfsumme in Ihrem Browser zu erhalten. Sie müssten Ihren sha1-Hashsummen-Generator dort einsetzen, wo der Kommentar "Inhalt" hat. –

+0

Isnt event.target.result entspricht der Daten-URL? Was meinst du mit dem Dateiinhalt ... welchen Teil des Dateiblobs soll ich verwenden ... sorry, aber ich bin ein Anfänger – user1526912