Credo mi sono imbattuto in uno di Paul Johnston a http://pajhome.org.uk/crypt/md5/contrib/sha1_stream.js. È elencato nella pagina http://pajhome.org.uk/crypt/md5/scripts.html. Non l'ho provato da solo, ma ho usato la sua versione non-streamable che ha modificato per questo.
AGGIORNAMENTO: Ecco alcuni esempi di codice (l'ho verificato su un SHA1 separato noto per essere corretto). Assicurati di includere lo sha1.js originale (trovato a http://pajhome.org.uk/crypt/md5/sha1.js) prima dello stream 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>
Grazie sunetos. Immagino che questo sia quello che voglio. Ma non c'è nessun documento né esempio per mostrare come usarlo. Mi potete aiutare? –
Appena aggiornato per mostrare un esempio di come usarlo. – sunetos
Si noti che la versione corrente di sha1_stream.js ha un bug e darà risultati errati per determinate lunghezze di input. Per risolvere questo problema sostituisci 'h [8] + = 512 - len% 512;' con 'h [8] = (len + 576 >> 9) << 9;' - si dimentica di includere il padding durante l'arrotondamento a un multiplo di 512 bit. La versione non streaming non ha quell'errore. – Zarat