我使用forge作爲加密庫(用於執行加密的gulp腳本)和前端(在瀏覽器內解密的情況下)。使用Javascript:AES加密緩慢
該電腦是一個i5-6200U瓦特/ 16GB RAM,並需要大約10秒的對稱加密。或解密15MB json文件。
我真正的問題是解密時間對於用戶來說太長(多個文件加載和解密需要30s +在這個系統上)。
我當然錯過了一些關鍵元素(緩衝區或......我在域中缺乏的經驗可能會錯過)。在下面的代碼中有明顯的錯誤嗎?感謝您的關注。
獲取數據
function logic(url){ return new Promise((resolve, reject) => { var xhr = new XMLHttpRequest(); xhr.onload = function (event) { resolve(xhr.response); }; xhr.onreject = function (err) { reject(err); } xhr.open('GET', url); xhr.send(); }); }
解密數據
load('data/dicom.json').then(bytes => { const tIn = new Date().getTime(); const forge = getForge(); const pwd = "aStringPassword"; const iv = getInitVector(); const salt = getSalt(); const key = forge.pkcs5.pbkdf2(pwd, salt, 100, 16); var decipher = forge.cipher.createDecipher('AES-CBC', key); decipher.start({iv: iv}); decipher.update(forge.util.createBuffer(bytez)); decipher.finish(); const clear = decipher.output.getBytes(); const tOut = new Date().getTime(); console.log(`decrypted in ${(tOut - tIn)/1000 }s`); // 10s for 15MB json file return clear ; });
請注意,JavaScript在加密時極其緩慢。沒有本地32/64位計算的腳本語言對很多事情都有好處,但快速加密不是其中之一。如果可能的話,你應該跳出JS並調用一個本地函數。 –
嗨@MaartenBodewes,感謝您的信息。好的,很高興知道。我試圖使用「window.crypto.subtle」對象。似乎它使用「本機」功能。你對這個工具有什麼意見嗎? – Jem
我對該公用程序沒有任何意見,甚至從未使用它。 –