2010-07-08 18 views
7

Tengo el mismo problema que: Can SHA-1 algorithm be computed on a stream? With low memory footprint?SHA1 JavaScript Implementación de cadena grande

Busco una implementación de JavaScript, que calcula bloque por bloque de una cadena muy grande. La idea es cortar la cadena en bloques de 512 bits y hacerlo bloque por bloque.

¿Alguna pista?

[Actualizado] Gracias sunetos de ayuda, escribo una aplicación java script de html5 litte: Generate SHA1 File Checksum Using HTML5 File API in Javascript

Respuesta

4

Creo que me encontré con uno de Paul Johnston en http://pajhome.org.uk/crypt/md5/contrib/sha1_stream.js. Se enumera en la página http://pajhome.org.uk/crypt/md5/scripts.html. No lo he probado yo mismo, pero he usado su versión no transitable que modificó para ello.

ACTUALIZACIÓN: Este es un código de ejemplo (lo verifiqué contra un SHA1 independiente que se sabe que es correcto). Asegúrese de incluir el sha1.js original (encontrado en http://pajhome.org.uk/crypt/md5/sha1.js) antes de sha1_stream.js transmisible.

<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

Gracias sunetos. Supongo que esto es lo que quiero. Pero no hay ningún documento ni ejemplo para mostrar cómo usarlo. ¿Me puedes ayudar? –

+0

Acabo de actualizarlo para mostrar una muestra de cómo usarlo. – sunetos

+0

Tenga en cuenta que la versión actual de sha1_stream.js tiene un error y dará resultados incorrectos para ciertas longitudes de entrada. Para solucionar esto, reemplace 'h [8] + = 512 - len% 512;' con 'h [8] = (len + 576 >> 9) << 9;' - olvida incluir el relleno al redondear a un múltiplo de 512 bits. La versión sin transmisión no tiene ese error. – Zarat