TweetNaCl 在尝试解密时给出了错误的编码
TweetNaCl gives wrong encoding when trying to decrypt
我正在努力让 TweetNaCl.js 正常工作。
我的问题是当我解密数据时,输出编码错误。
加密数据:
你好,世界
解密数据:
ä½ å¥½ï¼ä¸ç
这是我的解密函数:
Crypto.decrypt = function(key, nonce, ciphertext) {
var message, box;
try {
key = nacl.util.decodeBase64(key);
nonce = nacl.util.decodeBase64(nonce);
} catch(ex) {
alert('Error decoding');
return;
}
try {
box = nacl.util.decodeBase64(ciphertext);
} catch(ex) {
alert('Cannot decode box');
return;
}
message = nacl.secretbox.open(box, nonce, key);
if (message === false) {
alert('Failed to decrypt');
return;
}
try {
message = nacl.util.encodeUTF8(message);
console.log(message);
} catch(ex) {
alert('Cannot decode decrypted message to string');
return;
}
return message;
}
因此,如果我使用密钥 noIIyNy5sH61LdrmChTHW24qAFbNOv1brq9QnR9vsoE=
和随机数 XeB7tdP8CB8Y2/aybsK498gCRJz469yM
加密文本 你好,世界
,则加密文本将为 iFcrAeRqrnhu67zZupYO23UmEC0kl21Dcuo6b33gsg==
.
所以现在当我解密时:
Crypto.decrypt('noIIyNy5sH61LdrmChTHW24qAFbNOv1brq9QnR9vsoE=', 'XeB7tdP8CB8Y2/aybsK498gCRJz469yM', 'iFcrAeRqrnhu67zZupYO23UmEC0kl21Dcuo6b33gsg==');
输出:ä½ å¥½ï¼ä¸ç
而不是原始输入 你好,世界
。
在此示例页面中,输出工作得非常好:https://tweetnacl.js.org/#/secretbox 但不知何故,我的解密函数给出了错误的编码。
我做错了什么?
编辑:我做了一个 fiddle,其中编码工作正常......我的程序似乎在其他地方有错误。 https://jsfiddle.net/user88593902/t78kb92n/
he.js 库与 TweetNaCl 库冲突。删除它,它开始正常工作。
我正在努力让 TweetNaCl.js 正常工作。
我的问题是当我解密数据时,输出编码错误。
加密数据:
你好,世界
解密数据:
ä½ å¥½ï¼ä¸ç
这是我的解密函数:
Crypto.decrypt = function(key, nonce, ciphertext) {
var message, box;
try {
key = nacl.util.decodeBase64(key);
nonce = nacl.util.decodeBase64(nonce);
} catch(ex) {
alert('Error decoding');
return;
}
try {
box = nacl.util.decodeBase64(ciphertext);
} catch(ex) {
alert('Cannot decode box');
return;
}
message = nacl.secretbox.open(box, nonce, key);
if (message === false) {
alert('Failed to decrypt');
return;
}
try {
message = nacl.util.encodeUTF8(message);
console.log(message);
} catch(ex) {
alert('Cannot decode decrypted message to string');
return;
}
return message;
}
因此,如果我使用密钥 noIIyNy5sH61LdrmChTHW24qAFbNOv1brq9QnR9vsoE=
和随机数 XeB7tdP8CB8Y2/aybsK498gCRJz469yM
加密文本 你好,世界
,则加密文本将为 iFcrAeRqrnhu67zZupYO23UmEC0kl21Dcuo6b33gsg==
.
所以现在当我解密时:
Crypto.decrypt('noIIyNy5sH61LdrmChTHW24qAFbNOv1brq9QnR9vsoE=', 'XeB7tdP8CB8Y2/aybsK498gCRJz469yM', 'iFcrAeRqrnhu67zZupYO23UmEC0kl21Dcuo6b33gsg==');
输出:ä½ å¥½ï¼ä¸ç
而不是原始输入 你好,世界
。
在此示例页面中,输出工作得非常好:https://tweetnacl.js.org/#/secretbox 但不知何故,我的解密函数给出了错误的编码。
我做错了什么?
编辑:我做了一个 fiddle,其中编码工作正常......我的程序似乎在其他地方有错误。 https://jsfiddle.net/user88593902/t78kb92n/
he.js 库与 TweetNaCl 库冲突。删除它,它开始正常工作。