RSA解密的时候出现部分乱码情况

关于RSA加密之后,我解密的时候出现部分乱码情况,我这里解密别的东西都是正常的,只有这个不对,我通过这个网站https://tools.pcwanli.com/tools/rsa.html%EF%BC%8C%E5%8F%AF%E4%BB%A5%E8%A7%A3%E5%AF%86%E5%87%BA%E6%97%A0%E4%B9%B1%E7%A0%81%E7%9A%84%E4%B8%9C%E8%A5%BF%EF%BC%8C
我们这边负责加密的后端说是上面UTF-8编码格式问题,可是如果是编码格式问题,那为什么只有这么几个字解密乱码呢?别的数据解密都是正常的

img


下面是我的解密函数


let decryptLong = function (string) {
  const enc = new JSEncrypt();
  enc.setPrivateKey(PRIVATE_KEY);
  return enc.decryptLong(string);
};

有明文没有,加密后和出乱码的对比下看,说不定获取到的明文就是乱码的呢


let decryptLong = function (string) {
  let enc = new JSEncrypt();
  enc.setPrivateKey(PRIVATE_KEY);
  let decrypted = "";
  const arr = string.split("|");
  arr.forEach((str) => {
    let decryptedTemp = enc.decrypt(str);
    decrypted += decryptedTemp;
  });
  return decrypted;
};

试试我写的这种分段加密解密方法

在使用 JSEncrypt 进行 RSA 解密时出现中文乱码,可能是因为在加密时没有指定正确的编码方式,解密后字节序列与原始编码不一致导致的。为了保证解密后的中文数据正常显示,需要在加密时指定相应的编码方式,并在解密时进行相应的转换。

以下是一个示例代码:

const privateKey = '-----BEGIN PRIVATE KEY-';
const encrypted = xxxx';
const key = new JSEncrypt();
key.setPrivateKey(privateKey);
const decryptedBytes = key.decrypt(encrypted, 'utf8');
const decryptedString = new TextDecoder('utf-8').decode(new Uint8Array(decryptedBytes));
console.log(decryptedString);

在加密时,我们指定了编码方式为 utf8。在解密后,我们又使用了 TextDecoder 对象进行了解码,保证输出的字符串能够正确显示中文字符。

希望这些信息对你有所帮助!

我前几天也遇到过加密错误的问题,不知道和你的是不是同一个原因

我遇到的问题原因是加密完的url中含有+这个字符串,但是这个字符串会被浏览器url解析成%20。%20就是空格。导致传给后台出现了错误

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632