Javascript 尝试解密时,TweetNaCl给出了错误的编码

Javascript 尝试解密时,TweetNaCl给出了错误的编码,javascript,cryptography,nacl-cryptography,Javascript,Cryptography,Nacl Cryptography,我正在努力工作 我的问题是,当我解密数据时,输出编码错误 加密数据: 你好,世界 ä½ å¥½ï¼ä¸ç 解密数据: 你好,世界 ä½ å¥½ï¼ä¸ç 这是我的解密函数: Crypto.decrypt = function(key, nonce, ciphertext) { var message, box; try { key = nacl.util.decodeBase64(key); nonce = nacl.util.decodeBase64(nonce

我正在努力工作

我的问题是,当我解密数据时,输出编码错误

加密数据:

你好,世界
ä½ å¥½ï¼ä¸ç
解密数据:

你好,世界
ä½ å¥½ï¼ä¸ç
这是我的解密函数:

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;
}
所以如果我加密文本
你好,世界使用密钥
noiyny5sh61ldrmchthw24qafbnov1brq9qnr9vsoe=
和nonce
XeB7tdP8CB8Y2/aybsK498gCRJz469yM
加密文本将是
iFcrAeRqrnhu67zZupYO23UmEC0kl21Dcuo6b33gsg=

现在当我解密时:

Crypto.decrypt('noIIyNy5sH61LdrmChTHW24qAFbNOv1brq9QnR9vsoE=', 'XeB7tdP8CB8Y2/aybsK498gCRJz469yM', 'iFcrAeRqrnhu67zZupYO23UmEC0kl21Dcuo6b33gsg==');
输出:
而不是原始输入
你好,世界

在这个示例页面中,输出工作得非常好:但不知何故,我的解密函数给出了错误的编码

我做错了什么


编辑:我做了一把小提琴,那里的编码工作得很好。。。我的程序似乎在其他地方有一个bug

库与TweetNaCl库冲突。删除它后,它开始正常工作。

看起来像是字符集编码问题。您可以通过在以下行之前将输出打印到控制台进行调试:message=nacl.util.encodeUTF8(message);。该行前面的消息是一个包含随机字节的UINT8数组。我做了一个小提琴,在那里编码工作正常。只是我的应用程序在别的地方出了问题。。。不知道在哪里。您可以使用非多字节字符串来尝试enc/dec,比如说“TESTSTRING”,以缩小问题的范围。@Roshith它似乎可以使用a-Z0-9字符。但例如,字符
ó
编码为
ó
,字符
ä
编码为
Ã
。我不知道为什么会这样,酷。可能是双重编码。是的。无论如何谢谢你的帮助!