【发布时间】:2016-11-15 18:44:06
【问题描述】:
假设我有一个 Phonegap 移动应用程序,我想在本地索引数据库中存储一些用户数据(用户名/pass_hash),以便离线登录到应用程序。 我当然想加密这些数据,而且我的应用程序已经使用 CryptoJS。 据我了解,首先我需要使用 PBKDF2 通过密码生成加密密钥,然后只加密 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 到?(但据我所知,它应该是动态的) 谢谢!
【问题讨论】:
-
如果您使用 salt 进行加密,那么您需要使用相同的 salt 值来解密消息。
-
谢谢!我还发现了一篇好文章crackstation.net/hashing-security.htm可能对某人有用。
标签: javascript cordova encryption cryptojs