2010-07-08 2 views
7

У меня такая же проблема, как: Can SHA-1 algorithm be computed on a stream? With low memory footprint?SHA1 JavaScript Реализация для больших строк

Я ищу для реализации JavaScript, который вычисленная поблочен очень большой строки. Идея состоит в том, чтобы нарезать строку на 512 бит и сделать блок за блоком.

Подсказка?

[обновлено] Благодаря помощи sunetos-х, я пишу Litte приложение html5 Java Script: Generate SHA1 File Checksum Using HTML5 File API in Javascript

ответ

4

Я полагаю, что я наткнулся на один Пол Джонстон на http://pajhome.org.uk/crypt/md5/contrib/sha1_stream.js. Он указан на странице http://pajhome.org.uk/crypt/md5/scripts.html. Я не тестировал его сам, но я использовал его версию без потоковой передачи, которую он модифицировал для нее.

UPDATE: Вот пример кода (я проверял его на отдельный SHA1, который, как известно, правильный). Убедитесь, что вы включили исходный файл sha1.js (найденный в http://pajhome.org.uk/crypt/md5/sha1.js) перед потоковым 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

Thanks sunetos. Я думаю, это то, что я хочу. Но нет документа или примера, чтобы показать, как его использовать. Вы можете мне помочь? –

+0

Просто обновил его, чтобы показать образец того, как его использовать. – sunetos

+0

Обратите внимание, что текущая версия sha1_stream.js имеет ошибку и даст неверные результаты для определенных входных длин. Чтобы исправить это, замените 'h [8] + = 512 - len% 512;' с 'h [8] = (len + 576 >> 9) << 9;' - он забывает включать дополнение при округлении до нескольких из 512 бит. В версии без потоковой передачи нет этой ошибки. – Zarat