我相信我在http://pajhome.org.uk/crypt/md5/contrib/sha1_stream.js跨越一個來到保羅·約翰斯頓。它列在頁面http://pajhome.org.uk/crypt/md5/scripts.html上。我自己沒有測試過它,但我已經使用了他爲其修改的非流式版本。
更新:這裏是一些示例代碼(我對它進行了驗證,以證明它是正確的單獨的SHA1)。確保在流式sha1_stream.js之前包含原始sha1.js(在http://pajhome.org.uk/crypt/md5/sha1.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>
謝謝sunetos。 我想這是我想要的。但是沒有文檔和例子來展示如何使用它。你可以幫我嗎? – 2010-07-08 23:51:55
剛剛更新它以顯示如何使用它的示例。 – sunetos 2010-07-09 01:39:20
請注意,sha1_stream.js的當前版本有一個錯誤,並會給某些輸入長度提供不正確的結果。爲了解決這個問題,用'h [8] =(len + 576 >> 9)<< 9替換'h [8] + = 512 - len%512;' - 當舍入到多個時,它忘記包含填充的512位。非流媒體版本沒有該錯誤。 – Zarat 2014-05-27 13:04:18