Javascript CryptoJS如何每次生成密钥?
假设我有一个Phonegap移动应用程序,我想在本地索引数据库中存储一些用户数据(用户名/密码散列),以便离线登录到应用程序。 我当然想加密这些数据,我的应用程序已经使用了CryptoJS。 据我所知,首先我需要使用PBKDF2通过密码生成加密密钥,然后只加密CryptoJS.AES。 示例代码:Javascript CryptoJS如何每次生成密钥?,javascript,cordova,encryption,cryptojs,Javascript,Cordova,Encryption,Cryptojs,假设我有一个Phonegap移动应用程序,我想在本地索引数据库中存储一些用户数据(用户名/密码散列),以便离线登录到应用程序。 我当然想加密这些数据,我的应用程序已经使用了CryptoJS。 据我所知,首先我需要使用PBKDF2通过密码生成加密密钥,然后只加密CryptoJS.AES。 示例代码: function generateKey(p){ var salt = CryptoJS.lib.WordArray.random(128/8); return CryptoJS.PBKDF2(p,
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为空)
所以我想问,加密会话之间应该存储什么,
盐和iv到?(但据我所知,它应该是动态的)
谢谢 您正在
generateKey(…)
中生成一个新的salt。这使得PBKDF2派生出一个新密钥
function generateKey(p){
var salt = CryptoJS.lib.WordArray.random(128/8);
return CryptoJS.PBKDF2(p, salt, { keySize: 512/32, iterations: 1000 });
}
您需要在会话之间存储盐和iv。这两个值不需要保密。如果使用salt进行加密,则需要使用完全相同的salt值来解密消息。谢谢!我还发现一篇好文章可能对某人有用。