2010-07-08 5 views
7

J'ai le même problème que: Can SHA-1 algorithm be computed on a stream? With low memory footprint?SHA1 JavaScript pour la mise en œuvre grande chaîne

Je cherche une implémentation JavaScript qui calcule bloc par bloc d'une chaîne très grande. L'idée est de couper la chaîne en bloc de 512 bits et de le faire bloc par bloc.

Un conseil?

[mis à jour] aide de Merci sunetos, je vous écris une application de script litte html5 java: Generate SHA1 File Checksum Using HTML5 File API in Javascript

Répondre

4

Je crois que je suis tombé sur un par Paul Johnston à http://pajhome.org.uk/crypt/md5/contrib/sha1_stream.js. Il est répertorié sur la page http://pajhome.org.uk/crypt/md5/scripts.html. Je ne l'ai pas testé moi-même, mais j'ai utilisé sa version non streamable qu'il a modifiée pour cela. MISE À JOUR: Voici un exemple de code (je l'ai vérifié par rapport à un SHA1 distinct connu pour être correct). Assurez-vous d'inclure le fichier sha1.js d'origine (trouvé au http://pajhome.org.uk/crypt/md5/sha1.js) avant le fichier streamable sha1_stream.js.

<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

Merci sunetos. Je suppose que c'est ce que je veux. Mais il n'y a pas de document ni d'exemple pour montrer comment l'utiliser. Pouvez-vous m'aider? –

+0

Juste mis à jour pour montrer un exemple de comment l'utiliser. – sunetos

+0

Notez que la version actuelle de sha1_stream.js a un bug et donnera des résultats incorrects pour certaines longueurs d'entrée. Pour corriger cela, remplacez 'h [8] + = 512 - len% 512;' par 'h [8] = (len + 576 >> 9) << 9;' - il oublie d'inclure le remplissage lors de l'arrondi à un multiple de 512 bits. La version non-streaming n'a pas ce bug. – Zarat