簡體   English   中英

CryptoJS每次如何生成密鑰?

[英]CryptoJS how to generate a key every time?

假設我有一個Phonegap移動應用程序,並且我想在本地索引數據庫中存儲一些用戶數據(用戶名/ pass_hash),以提供離線登錄應用程序的權限。 我當然想加密該數據,並且我的應用程序已經使用CryptoJS。 據我所知,首先我需要使用PBKDF2通過密碼生成encryption_key,然后才對CryptoJS.AES進行加密。 示例代碼:

function generateKey(p){
var salt = CryptoJS.lib.WordArray.random(128/8);
return CryptoJS.PBKDF2(p, salt, { keySize: 512/32, iterations: 1000 });     
}

var pass = "test1"; 
var iv  = CryptoJS.lib.WordArray.random(16);
key512Bits1000Iterations = generateKey(pass);
var encrypted = CryptoJS.AES.encrypt("Message", key512Bits1000Iterations, { iv: iv });
var decrypted = CryptoJS.AES.decrypt(encrypted, key512Bits1000Iterations, { iv: iv });

//decrypting with another key step
key512Bits1000Iterations2 = generateKey(pass);
var decrypted2 = CryptoJS.AES.decrypt(encrypted, key512Bits1000Iterations2, { iv: iv });
console.log("decrypted " + decrypted.toString(CryptoJS.enc.Utf8));
console.log("decrypted2 " + decrypted2.toString(CryptoJS.enc.Utf8));

使用動態鹽和iv。 但是,當我第二次使用相同的密碼生成用於解密的密鑰時,我得到了錯誤的結果。(decrypted2為空) 所以我想問一下,在加密會話,salt和iv到?之間應該存儲什么(但據我所知應該如此)充滿活力)謝謝!

您正在generateKey(...)generateKey(...)新的鹽。 這使得PBKDF2派生了新密鑰。

function generateKey(p){
    var salt = CryptoJS.lib.WordArray.random(128/8);
    return CryptoJS.PBKDF2(p, salt, { keySize: 512/32, iterations: 1000 });     
}

您將需要在會話之間存儲iv 這兩個值不必保密。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM