Javascript 使用JS在文件上加密JS.MD5

Javascript 使用JS在文件上加密JS.MD5,javascript,html,file-upload,md5,Javascript,Html,File Upload,Md5,我想计算客户端文件的MD5。我已经使用cryptoJS.MD5完成了。它在任何字符串输入上都能正常工作,但在文件中不能正常工作。你能帮我知道我错过了什么吗。提前谢谢 <html> <head> <script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/md5.js"></script> <script> functi

我想计算客户端文件的MD5。我已经使用cryptoJS.MD5完成了。它在任何字符串输入上都能正常工作,但在文件中不能正常工作。你能帮我知道我错过了什么吗。提前谢谢

<html>
    <head>
    <script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/md5.js"></script>
    <script>
    function fn()
    {
        var reader = new FileReader();
        reader.onloadend=function(){
         text = (reader.result);
         reader.readAsBinaryString(document.getElementById("files").files[0]);
           var hash1 = CryptoJS.MD5(text);
            console.log("hash1="+hash1.toString());

        }
        var hash = CryptoJS.MD5("Message");
        console.log("hash=" + hash.toString()); 
        alert("hi");

    }
     </script>
  </head>
  <body>
    <form name="myform" id="myform" method="post" action="" enctype="multipart/form-data">
         <input type="file" name="files" id="files">
         <input type="submit" onclick="fn()">
    </form>
  </body>

</html>

哎呀。这里有几个问题

首先,表单提交,因此,一旦页面刷新,您登录到控制台的任何内容都将消失。去掉表单标签;毕竟,您实际上并没有向服务器提交任何内容

第二,开始读取文件readAsBinaryString的行位于读取完成时调用的回调中。。。因此,文件的读取实际上从未开始。将该行移到回调之外

最后,JavaScript实际上没有二进制字符串类型。尽管如此,我们所处理的二进制字符串仍然是UTF-16字符。但是CryptoJS无法判断您的UTF-16字符串是否表示二进制数据。因此,您必须明确说出要使用的字节编码字符:

CryptoJS.enc.Latin1.parse(text)