Como gerar hash de arquivo MD5 em javascript?

Como escrever functionForGenerateMD5hash para este código? Eu já tenho fileVideo e preciso enviar o md5 hash desse arquivo para o servidor clicando no botão.

 $("#someButton").click(function() { var fr = new FileReader(); fr.onload = function(e) { string md5 = functionForGenerateMD5hash(e.target.result); // send md5 here }; fr.readAsArrayBuffer(fileVideo); 

Existem funções para gerar hashes MD5 localizados aqui:

http://www.myersdaily.org/joseph/javascript/md5-text.html

http://pajhome.org.uk/crypt/md5/md5.html

No entanto, eu recomendaria usar um hash mais seguro, como o SHA256

Se você não quiser usar bibliotecas ou outras coisas, você pode usar essa abordagem nativa de javascript:

 var MD5 = function(d){result = M(V(Y(X(d),8*d.length)));return result.toLowerCase()};function M(d){for(var _,m="0123456789ABCDEF",f="",r=0;r>>4&15)+m.charAt(15&_);return f}function X(d){for(var _=Array(d.length>>2),m=0;m<_.length;m++)_[m]=0;for(m=0;m<8*d.length;m+=8)_[m>>5]|=(255&d.charCodeAt(m/8))<>5]>>>m%32&255);return _}function Y(d,_){d[_>>5]|=128<<_%32,d[14+(_+64>>>9<<4)]=_;for(var m=1732584193,f=-271733879,r=-1732584194,i=271733878,n=0;n>16)+(_>>16)+(m>>16)<<16|65535&m}function bit_rol(d,_){return d<<_|d>>>32-_} var value = 'test'; var result = MD5(value); document.body.innerHTML = 'hash: ' + result; 

O CryptoJS é uma biblioteca criptográfica que pode gerar hash md5 entre outros:

   

http://code.google.com/p/crypto-js/#MD5

CDN: https://cdnjs.com/libraries/crypto-js Google code: https://code.google.com/archive/p/crypto-js/downloads

Versão simplificada e minificada (cerca de 3,5k) desta implementação agradável http://pajhome.org.uk/crypt/md5/md5.html

será (despojado conversão utf-8, maiúsculas / minúsculas altere a matriz). Este é o menor tamanho que eu consegui, ainda perfeito para servidores web embutidos.

 function md5(d){return rstr2hex(binl2rstr(binl_md5(rstr2binl(d),8*d.length)))}function rstr2hex(d){for(var _,m="0123456789ABCDEF",f="",r=0;r>>4&15)+m.charAt(15&_);return f}function rstr2binl(d){for(var _=Array(d.length>>2),m=0;m<_.length;m++)_[m]=0;for(m=0;m<8*d.length;m+=8)_[m>>5]|=(255&d.charCodeAt(m/8))<>5]>>>m%32&255);return _}function binl_md5(d,_){d[_>>5]|=128<<_%32,d[14+(_+64>>>9<<4)]=_;for(var m=1732584193,f=-271733879,r=-1732584194,i=271733878,n=0;n>16)+(_>>16)+(m>>16)<<16|65535&m}function bit_rol(d,_){return d<<_|d>>>32-_}