SHA-Hash einer lokalen Datei in Javascript mit der SubtleCrypto API berechnen

English Deutsch

Das folgende Beispiel verwendet die SubtleCrypto API, um den SHA-256-Hash einer Datei zu berechnen, die in einem Datei-Input ausgewählt wird. Die Prüfsumme wird vollständig auf der Client-Seite berechnet, die Datei muss überhaupt nicht auf einen Server hochgeladen werden.

Dieser Code wurde darauf überprüft, die gleiche Prüfsumme zu generieren wie wenn man sha256sum auf der Kommandozeile ausführt.

Vollständiges Beispiel

Sie können diese Datei herunterladen, als index.html speichern und im Browser öffnen. Wählen Sie dann eine Datei aus und prüfen Sie die Entwickler-

index.html
<html>
<body>
    <input type="file" id="myfile" onchange="onMyfileChange(this)" />

    <script type="text/javascript">
        function onMyfileChange(fileInput) {
            if(fileInput.files[0] == undefined) {
                return ;
            }

            var filename = fileInput.files[0].name;
            // var filesize = fileInput.files[0].size;
            var reader = new FileReader();
            reader.onload = function(ev) {
                console.log("File", filename, ":");
                //
                crypto.subtle.digest('SHA-256', ev.target.result).then(hashBuffer => {
                    // Hex in Hash umwandeln, siehe https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/digest#converting_a_digest_to_a_hex_string
                    const hashArray = Array.from(new Uint8Array(hashBuffer));
                    const hashHex = hashArray.map(b => b.toString(16).padStart(2, '0')).join(''); // Bytes in Hex-String umwandeln
                    console.log(hashHex);
                }).catch(ex => console.error(ex));
            };
            reader.onerror = function(err) {
                console.error("Fehler beim Lesen der Datei", err);
            }
            reader.readAsArrayBuffer(fileInput.files[0]);
        }
    </script>
</body>
</html>

Check out similar posts by category: Javascript