我正在嘗試使用javascript來計算文件的SHA1值。 該文件位於與index.html相同的目錄中,並且使用ajax作爲查詢參數給出的名稱進行加載。SHA1計算返回錯誤值
例如,呼叫http://localhost:7070/index.html?file=file.zip應計算爲SHA1 file.zip
下面的代碼計算SHA1 但結果比我得到使用帶有SHA1這個在線工具和上傳文件http://onlinemd5.com/
不同$(document).ready(function(){
var file = utils.getUrlVars() && utils.getUrlVars().file;
if (!file) throw "error - no URL was found. set 'file' in query string.";
$.ajax({
url: file,
success: function(data){
var sha1= CryptoJS.SHA1(data).toString();
console.log('sha1 - success', sha1);
},
error: function(error){
console.log('ERROR');
}
})
});
有什麼區別?我想在線工具計算它是正確的(它也給了我使用Java代碼計算時得到的確切結果),所以這個JS代碼中的某些內容略微不同。
的問題絕對不是在CryptoJS包計算使用腳本字符串「你好」時,因爲會產生以下結果:
sha1 - success aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d
,在使用在線工具,你會得到相同的(大寫):
AAF4C61DDCC5E8A2DABEDE0F3B482CD9AEA9434D
問題是加載它後的數據格式或使用它的方式。
當我使用Java來計算SHA1時,我通過計算它在文件字節數組上得到了相同的結果,所以它指出了使用此腳本的bytearray在某種程度上不同/部分的事實。
你得到什麼SHA1SUM文件?它是da39a3ee5e6b4b0d3255bfef95601890afd80709?那將是一個空文件。嘗試比較一個已知的簡單字符串的JavaScript輸出。 「你好」應該產生aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d。如果運行良好,錯誤在文件處理中。也許JavaScript不允許從磁盤加載文件。 – neuhaus
不,結果在我更改文件時發生變化,它確實計算了與文件相關的SHA1。 – Eyal
發送文件內容時,是否使用了頭文件「Content-Type:application/octet-stream」? – Mjh