Реализация JavaScript SHA1 для большой строки - PullRequest
7 голосов
/ 08 июля 2010

У меня та же проблема, что и: Может ли алгоритм SHA-1 быть вычислен в потоке? С низким объемом памяти?

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

Есть подсказка?

[обновлено] Благодаря помощи sunetos, я пишу небольшое приложение html5 java-скрипта: Создание контрольной суммы файла SHA1 с использованием API-интерфейса файла HTML5 в JavaScript

1 Ответ

4 голосов
/ 08 июля 2010

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

ОБНОВЛЕНИЕ: Вот пример кода (я проверил его по отдельному 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>
...