gpt4 book ai didi

javascript - 在线/流媒体MD5算法?

转载 作者:太空宇宙 更新时间:2023-11-04 15:26:53 26 4
gpt4 key购买 nike

  1. 是否可以使用 FileReader API 和 onprogress 事件访问随 HTML5 传入的数据?

  2. 如果是这样,是否有 MD5 或其他快速散列算法的“在线”版本,以便我可以在文件完全读取之前开始计算散列值?

我想在客户端计算哈希值,并在发送整个文件之前只将哈希值发送到服务器,以便在启动文件上传之前检查重复项。

目前我不关心对旧版浏览器的支持。

编辑:我知道哈希冲突并不能保证文件重复,唯一可以确定的方法是逐字节检查,这意味着无论如何我都必须上传文件。概率很低,我愿意冒这个风险;最坏的情况我会提示用户说“这个文件似乎已经在服务器上了;你确定要上传它吗?”

最佳答案

is there an "online" version of MD5 or other fast hashing algorithm so that I can begin computing the hash before the file is fully read?

是的,您可以使用 sjcl如果你想使用 SHA。 sjcl 没有对 MD5 的 native 支持,因此您必须自己编写它(尽管我确信其他人已经这样做了)。 CryptoJS具有 native MD5 支持,但速度明显较慢。

I recognize that a hash collision does not guarantee a duplicate file [...] The probability is low enough that I'm willing to take this risk;

与自然发生碰撞相比, meteor 撞击地球并终结人类生命(从而完全不需要散列)的概率足够低。当然,除非用户故意制造碰撞,因为 MD5 的抗碰撞性已被破坏。

这是一个现场demo 我认为您要完成的任务,减去“访问数据”部分。我不确定这是否可能。这是我很久以前写的,它使用 CryptoJS,所以性能不是很好,但它完成了工作。重要的 block 是:

function handleFileSelect(evt) 
{
evt.stopPropagation();
evt.preventDefault();

var files = evt.target.files || evt.dataTransfer.files; // FileList object.

for (var i=0, file; file = files[i]; ++i)
{
// this creates the FileReader and reads stuff as text
var fr = new FileReader();

fr.onload = (function(theFile) {
return function (e) {
var hashes = parsePseudoBuffer(e.target.result);

document.getElementById('output').innerHTML += '<br />' + theFile.name + '<br />'
+ 'MD5: ' + hashes.md5 + '<br />' + 'SHA1: ' + hashes.sha1 + '<br />' ;

};
}) (file);

fr.readAsArrayBuffer(file); // ArrayBuffer
}

}

function parsePseudoBuffer(result)
{

var buffs = new Uint8Array(result); // buffer thingie
var md5 = CryptoJS.algo.MD5.create();
var sha1 = CryptoJS.algo.SHA1.create();
var bufsize = 8 * 1024; // 8K buffer

for (var bstart=0, bend=bufsize; bstart < buffs.length; bstart+=bufsize, bend+= bufsize)
{
var data = CryptoJS.lib.WordArray.create(buffs.subarray(bstart, bend));
md5.update(data);
sha1.update(data);
}

md5 = md5.finalize();
sha1 = sha1.finalize();

return {'md5': md5, 'sha1': sha1} ;

}

关于javascript - 在线/流媒体MD5算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18885655/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com