关于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编码格式问题,可是如果是编码格式问题,那为什么只有这么几个字解密乱码呢?别的数据解密都是正常的
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就是空格。导致传给后台出现了错误
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!