2015-10-05 130 views
-1

我想計算客戶端文件的MD5。我使用cryptoJS.MD5完成了它。它對任何字符串輸入都適當地進行掃描,但不適用於文件。你能幫我知道我錯過了什麼嗎?提前致謝!!cryptoJS.MD5使用JS的文件

<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> 

回答

0

Y。這裏有幾個問題。

首先,你的表單提交,所以無論你登錄到控制檯,一旦頁面刷新,就會消失。擺脫表單標籤;畢竟,你實際上並沒有向服務器提交任何東西。

其次,開始讀取文件(readAsBinaryString)的行是裏面的讀取完成時調用的回調...因此文件的讀取從未實際開始。在回調之外移動該行。

最後,JavaScript並沒有真正的二進制字符串類型。我們視爲二進制字符串仍然是UTF-16字符。但CryptoJS無法推測您的UTF-16字符串是爲了表示二進制數據。所以相反,您必須明確地說出您要使用的字符到字節編碼:

CryptoJS.enc.Latin1.parse(text)