使用两个不同的密钥加密/解密
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
转换为字符串以便第二次解密它时,我在铬控制台得到Cannot read property 'toString' of undefined
。这应该意味着第一个解密过程返回一个空字符串。
我的问题
如何解决这个问题?
您的变量名有一个错别字。检查你在哪里定义了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>
看起来是空的。您已经初始化了decripted1var decrypted1 = CryptoJS.AES.decrypt(encrypted_text,serverkey);然后尝试"toString()"未初始化的解密变量decrypted1 = decrypted.toString();虽然我认为你不需要这条线…(?) .
相关文章:
- API密钥使用和检查示例
- 通过WebCryptoAPI而不是已浏览的节点加密模块在浏览器中生成ECDH密钥
- 基于 Java 生成的 RSA 密钥的 JavaScript 加密
- 在Javascript中生成PGP密钥对,并使用加密的PGP私钥对文本进行签名
- JSON 数据加密/解密或密钥值对
- 使用Diffie-Hellman密钥交换和AES通过HTTP进行客户端加密
- RSA加密比密钥长的字符串
- CryptoJS使用密码短语加密AES,但PHP解密需要密钥
- 用密钥加密javascript中的pass,然后检索原始密码(尽可能安全)
- Javascript和PHP的XOR加密因某些密钥而失败
- JavaScript加密字符串没有密钥
- 不能使用密钥对验证Node.js加密中的签名
- 加密函数,即使使用错误的密钥,也总是解密为纯文本
- Javascript -如何保护用于客户端加密的密钥
- 简单JavaScript加密&不使用密钥解密
- 使用两个不同的密钥加密/解密
- 使用JavaScript访问浏览器's密钥库中的签名/加密—示例代码?(WebCryptoAPI)
- 只加密json密钥值,并获得整个json对象的响应与密钥值加密
- 如何在网站中加密第三方api密钥
- 我想在客户端加密密码并使用非对称密钥解密密码