2010-07-08 33 views
7

Tôi có cùng một vấn đề với: Can SHA-1 algorithm be computed on a stream? With low memory footprint?Thực hiện JavaScript SHA1 cho chuỗi lớn

Tôi đang tìm cách thực hiện JavaScript được tính theo khối của một chuỗi rất lớn. Ý tưởng là cắt chuỗi thành khối 512 bit và thực hiện theo khối.

Bất kỳ gợi ý nào?

[cập nhật] Cảm ơn sunetos của sự giúp đỡ, tôi viết một ứng dụng html5 java script litte: Generate SHA1 File Checksum Using HTML5 File API in Javascript

Trả lời

4

Tôi tin rằng tôi đi qua từng Paul Johnston tại http://pajhome.org.uk/crypt/md5/contrib/sha1_stream.js. Nó được liệt kê trên trang http://pajhome.org.uk/crypt/md5/scripts.html. Tôi đã không tự mình thử nghiệm, nhưng tôi đã sử dụng phiên bản không thể phát trực tuyến của anh ấy mà anh ấy đã sửa đổi cho nó.

CẬP NHẬT: Dưới đây là một số mã mẫu (Tôi đã xác minh mã này với một SHA1 riêng biệt được biết là chính xác). Đảm bảo bạn bao gồm sha1.js gốc (được tìm thấy tại http://pajhome.org.uk/crypt/md5/sha1.js) trước sha1_stream.js có thể phát trực tuyến.

<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

Cảm ơn sunetos. Tôi đoán đây là những gì tôi muốn. Nhưng không có tài liệu và ví dụ để chỉ cách sử dụng nó. Bạn có thể giúp tôi được không? –

+0

Chỉ cần cập nhật nó để hiển thị một mẫu về cách sử dụng nó. – sunetos

+0

Lưu ý rằng phiên bản hiện tại của sha1_stream.js có lỗi và sẽ cho kết quả không chính xác cho một số độ dài đầu vào nhất định. Để sửa lỗi này thay thế 'h [8] + = 512 - len% 512;' với 'h [8] = (len + 576 >> 9) << 9;' - nó quên bao gồm phần đệm khi làm tròn đến bội số 512 bit. Phiên bản không trực tuyến không có lỗi đó. – Zarat

Các vấn đề liên quan