2010-07-08 6 views
7

Ich habe das gleiche Problem wie: Can SHA-1 algorithm be computed on a stream? With low memory footprint?SHA1 JavaScript-Implementierung für große Zeichenfolge

Ich bin für eine JavaScript-Implementierung suchen, den Block eines sehr großen Zeichenfolge durch den Block berechnet. Die Idee besteht darin, die Zeichenfolge in einen 512-Bit-Block zu zerlegen und Block für Block zu bearbeiten.

Irgendwelche Hinweise?

[aktualisiert] Dank sunetos Hilfe, schreibe ich ein litte html5 Java Script App: Generate SHA1 File Checksum Using HTML5 File API in Javascript

Antwort

4

Ich glaube, ich http://pajhome.org.uk/crypt/md5/contrib/sha1_stream.js über ein von Paul Johnston kam. Es ist auf der Seite http://pajhome.org.uk/crypt/md5/scripts.html aufgeführt. Ich habe es nicht selbst getestet, aber ich habe seine nicht-streambare Version verwendet, die er dafür modifiziert hat.

UPDATE: Hier ist ein Beispiel Code (ich verifizierte es gegen eine separate SHA1 bekannt als korrekt). Stellen Sie sicher, dass Sie das ursprüngliche sha1.js (gefunden unter http://pajhome.org.uk/crypt/md5/sha1.js) vor dem Streamable sha1_stream.js enthalten.

<script src="sha1.js" type="text/javascript" charset="utf-8"></script> 
<script src="sha1_stream.js" type="text/javascript" charset="utf-8"></script> 

<script type="text/javascript" charset="utf-8"> 

    var input = 'abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz'; 

    var blocksize = 512; 
    var h = naked_sha1_head(); 
    for (var i = 0; i < input.length; i += blocksize) { 
     var len = Math.min(blocksize, input.length - i); 
     var block = input.substr(i, len); 
     naked_sha1(str2binb(block), len*chrsz, h); 
    } 
    var result = binb2hex(naked_sha1_tail(h)); 

</script> 
+0

Danke sunetos. Ich denke, das ist was ich will. Aber es gibt weder ein Dokument noch ein Beispiel, um zu zeigen, wie man es benutzt. Kannst du mir helfen? –

+0

Nur aktualisiert, um ein Beispiel zu zeigen, wie man es benutzt. – sunetos

+0

Beachten Sie, dass die aktuelle Version von sha1_stream.js einen Fehler aufweist und bei bestimmten Eingabedaten falsche Ergebnisse liefert. Um das zu beheben, ersetze 'h [8] + = 512 - len% 512;' mit 'h [8] = (len + 576 >> 9) << 9;' - es vergisst, die Auffüllung beim Runden auf ein Vielfaches zu berücksichtigen von 512 Bits. Die Nicht-Streaming-Version hat diesen Fehler nicht. – Zarat