共计 1092 个字符,预计需要花费 3 分钟才能阅读完成。
已有服务器应用的是 ASP.net 进行 RSA 加密,
新服务器应用 koa2,
加密后的后果应用 nodejs 自带的 crypto 和 node-rsa 均无奈解密,
起因未明。
试用多个组件后,发现 node-jsencrypt 的加密解密后果能够通用。
故特意记录。
简略的解密流程:
const JSEncrypt = require("node-jsencrypt"); | |
const PUBLICKEY = | |
`-----BEGIN PUBLIC KEY----- | |
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCFSws2t8RQ8IlrXQmkE7lOYQ5h | |
Xya+HdXrBDh5zGv3+suPEj8K+sLuPfsGCRC6VbyKkzwGECNrzwOPWTx7szHMp4Ou | |
IRCe8wEyV2TAri7eRukgelXVG4Fh4F1jS14jdWeTfRXFxygkkGTyCvKbWzm9Hp93 | |
fNKDHuB+bTvRS9YMuwIDAQAB | |
-----END PUBLIC KEY-----`;// 公钥 | |
const rsaEncrypt = ` 密文 `; | |
let jsencrypt = new JSEncrypt(); | |
jsencrypt.setPrivateKey(PRIVATEKEY); | |
let decrypt = jsencrypt.decrypt(rsaEncrypt) |
字符串长度超过 117 时,该组件就不能间接解密,如果超长字符串加密,须要进行宰割解决
长字符串的加密解决:
// 宰割 | |
if (querystr.length > 117) {let cnt = Number.parseInt(querystr.length / 117) + 1; | |
ori_slice.push(querystr.slice(0, len_max)) | |
for (let i = 1; i < cnt; i++) {const _slice = querystr.slice(len_max * i).trim(); | |
if (_slice.length > 0) {ori_slice.push(querystr.slice(len_max * i)); | |
} | |
} | |
} |
// 加密并组合 | |
let encrypt_list = ori_slice.map(i => {let jsencrypt = new JSEncrypt(); | |
jsencrypt.setPublicKey(PUBLICKEY); | |
let encrypt = jsencrypt.encrypt(i); | |
return encrypt; | |
}); | |
let encrypt_query = encrypt_list.join('::');// 以:: 双冒号划分 |
解密时,分段解密并拼接即可
正文完