Encrypt/decrypt 有两个不同的键
Encrypt/decrypt with two different keys
我的代码
我正在使用 CryptoJS 使用两个不同的密钥加密字符串:
var password = "testpassword";
var serverkey = "randomkey";
var text = document.getElementById("new_note").value;
var encrypted1 = CryptoJS.AES.encrypt(text, password);
encrypted1 = encrypted1.toString();
var encrypted = CryptoJS.AES.encrypt(encrypted1,serverkey);
并尝试使用此代码对其进行解密:
var password = "testpassword";
var serverkey = "randomkey";
var encrypted_text = localStorage.getItem("encrypted");
var decrypted1 = CryptoJS.AES.decrypt(encrypted_text,serverkey);
decrypted1 = decrypted.toString();
var decrypted = CryptoJS.AES.decrypt(decrypted1,password);
decrypted = decrypted.toString(CryptoJS.enc.Utf8);
document.getElementById("decrypted").innerHTML = decrypted;
什么不起作用
虽然加密似乎工作正常,但当我尝试将 decrypted1
转换为字符串以便第二次解密时,我在 chrome 控制台上得到 Cannot read property 'toString' of undefined
.这应该意味着第一个解密过程returns一个空字符串。
我的问题
我该如何解决这个问题?
您的变量名有错别字。检查您定义 decrypted
的位置以及使用它的位置。您打算使用 decrypted1
.
此外,您的编码有问题。第一个 decrypted1.toString();
会将字符串编码为十六进制,但之前您调用的 encrypted1.toString();
不会编码为十六进制,而是一种特殊的 Base64 编码(与 OpenSSL 兼容)。您需要编码为 UTF-8 才能获得与之前加密时相同的编码。
这是工作代码:
document.getElementById("enc_button").onclick = function(){
var password = "testpassword";
var serverkey = "randomkey";
var text = document.getElementById("new_note").value;
var encrypted1 = CryptoJS.AES.encrypt(text, password);
encrypted1 = encrypted1.toString();
var encrypted = CryptoJS.AES.encrypt(encrypted1, serverkey);
var decrypted1 = CryptoJS.AES.decrypt(encrypted,serverkey);
decrypted1 = decrypted1.toString(CryptoJS.enc.Utf8);
var decrypted = CryptoJS.AES.decrypt(decrypted1,password);
decrypted = decrypted.toString(CryptoJS.enc.Utf8);
document.getElementById("decrypted").innerHTML = decrypted;
}
<script src="https://cdn.rawgit.com/CryptoStore/crypto-js/3.1.2/build/rollups/aes.js"></script>
<div id="decrypted">Please wait...</div>
<div>
Insert new note:
<input type="text" id="new_note">
<input type="button" id="enc_button" value="Encrypt & Decrypt">
</div>
描述的似乎是空的。
你已经初始化 decripted1
var decrypted1 = CryptoJS.AES.decrypt(encrypted_text,serverkey);
然后尝试 "toString()" 未初始化的解密变量
解密1 = decrypted.toString();
虽然我认为你不需要这一行... (?).
我的代码
我正在使用 CryptoJS 使用两个不同的密钥加密字符串:
var password = "testpassword";
var serverkey = "randomkey";
var text = document.getElementById("new_note").value;
var encrypted1 = CryptoJS.AES.encrypt(text, password);
encrypted1 = encrypted1.toString();
var encrypted = CryptoJS.AES.encrypt(encrypted1,serverkey);
并尝试使用此代码对其进行解密:
var password = "testpassword";
var serverkey = "randomkey";
var encrypted_text = localStorage.getItem("encrypted");
var decrypted1 = CryptoJS.AES.decrypt(encrypted_text,serverkey);
decrypted1 = decrypted.toString();
var decrypted = CryptoJS.AES.decrypt(decrypted1,password);
decrypted = decrypted.toString(CryptoJS.enc.Utf8);
document.getElementById("decrypted").innerHTML = decrypted;
什么不起作用
虽然加密似乎工作正常,但当我尝试将 decrypted1
转换为字符串以便第二次解密时,我在 chrome 控制台上得到 Cannot read property 'toString' of undefined
.这应该意味着第一个解密过程returns一个空字符串。
我的问题
我该如何解决这个问题?
您的变量名有错别字。检查您定义 decrypted
的位置以及使用它的位置。您打算使用 decrypted1
.
此外,您的编码有问题。第一个 decrypted1.toString();
会将字符串编码为十六进制,但之前您调用的 encrypted1.toString();
不会编码为十六进制,而是一种特殊的 Base64 编码(与 OpenSSL 兼容)。您需要编码为 UTF-8 才能获得与之前加密时相同的编码。
这是工作代码:
document.getElementById("enc_button").onclick = function(){
var password = "testpassword";
var serverkey = "randomkey";
var text = document.getElementById("new_note").value;
var encrypted1 = CryptoJS.AES.encrypt(text, password);
encrypted1 = encrypted1.toString();
var encrypted = CryptoJS.AES.encrypt(encrypted1, serverkey);
var decrypted1 = CryptoJS.AES.decrypt(encrypted,serverkey);
decrypted1 = decrypted1.toString(CryptoJS.enc.Utf8);
var decrypted = CryptoJS.AES.decrypt(decrypted1,password);
decrypted = decrypted.toString(CryptoJS.enc.Utf8);
document.getElementById("decrypted").innerHTML = decrypted;
}
<script src="https://cdn.rawgit.com/CryptoStore/crypto-js/3.1.2/build/rollups/aes.js"></script>
<div id="decrypted">Please wait...</div>
<div>
Insert new note:
<input type="text" id="new_note">
<input type="button" id="enc_button" value="Encrypt & Decrypt">
</div>
描述的似乎是空的。 你已经初始化 decripted1 var decrypted1 = CryptoJS.AES.decrypt(encrypted_text,serverkey); 然后尝试 "toString()" 未初始化的解密变量 解密1 = decrypted.toString(); 虽然我认为你不需要这一行... (?).