0
私はPhonegapモバイルアプリを持っていて、オフラインでアプリへのログインを提供するために、ローカルインデックス付きdbにいくつかのユーザーデータ(username/pass_hash)を保存したいとします。 私はそのデータをもちろん暗号化したい、私のアプリはすでにCryptoJSを使用しています。 私が理解したように、まずPBKDF2を使ってpasswordでencryption_keyを生成し、CryptoJS.AESを暗号化する必要があります。 例コード:CryptoJS毎回鍵を生成する方法は?
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が使用されます。 しかし、同じパスワードで復号化の鍵を生成すると、間違った結果が出る(復号化された2は空です) 私は暗号化セッションの間に何を保存すべきですか?私はそれが動的でなければならないと理解した) ありがとう!
暗号化にsaltを使用している場合は、メッセージの暗号化に同じsalt値を使用する必要があります。 –
ありがとう! 私はまた良い記事を見つけたhttps://crackstation.net/hashing-security.htm役に立つかもしれない誰か。 – Maxim