message too long for rsa [solution]

相关依赖包
https://www.npmjs.com/package/jsencrypt

// 私钥
const privateKey = `
-----BEGIN RSA PRIVATE KEY-----
MIICWwIBAAKBgQCAxKwtmALgQK9kEWjVpqbuBB8icjb64UF4Bq/GpKTRN7ilOuUZ
AkCh0bDmFMayab4BQguvl+7eFma97h/A2OErNFzaK5zuWdc7/DZybB7UOzhfTgSm
88pPdjnQGb2mNFeQ1Gz2oxkix+Muk/iXwrMaexFDFjN237cXuW3FUndgfwIDAQAB
AoGAAPLyHefn5YU0hbVHI4P16P0oyZUz6Idudxb9hqZB/LS/bKBRfeyxUz/7YMa4
bCoxV0sIUQP6o7JgkXfGziILDsa1rcbMjR8JZypvMqkhDk+HvT8qi3uPjmxGT3us
SMM+WtT3wTmwKq9cb5ldrDRdDukH/EJVSEVZtFsr8q0UtUkCQQCQO9qnPXgPdyJ+
jvXZhGmDroE5FIOer9VkR/dddddddddddddddddOfGgSY1n4rVHh6nfRKZOHvQ0P
uKPicMgdAkEA5IzdV61q2TQAItP1PnrpnHslJ5lmls4pmLYVy6cRgPMDtTdfxErq
KuTxA0tEIVYznXJu4JPnP5vafyULsQPASwJAKAYT9Nif2lrK3ae6HTQbO4lPHpHM
vFo6sustUrpnFCf1MxBQVvThyyvGjWO4ccNWt4Qi343T/JS/bR9lis6VGQJAT3Ay
wvXQzJwJbBGWDVh1eGFJIcFs6f/Qb3bijn2MVPCimksb60NKrwwSRV3U2W131ULg
DQj7eJ14TXcX4Df4jwJAZMKmzojHUuFOsjo2VWIgwhjglYTVUknON+D2skatjyk1
jPSYEhquhaa7cyHfMioFrMjnZEjRiyLUYcSabcdf123123
-----END RSA PRIVATE KEY-----
`;

// 公钥
const publicKey = `
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCAxKwtmALgQK9kEWjVpqbuBB8i
cjb64UF4Bq/GpKTRN7ilOuUZAkCh0bDmaddfdb4BQguvl+7eFma97h/A2OErNFza
K5zuWdc7/DZybB7UOzhfTgSm88pPdjnQGb2mNFeQ1Gz2oxkix+abc/iXwrMaexFD
FjN237cXuW3FUndgf12312313
-----END PUBLIC KEY-----
`;

// 长文本加密处理
JSEncrypt.prototype.encryptLong = function (text) {
    let k = this.getKey();
    let maxLength = (((k.n.bitLength() + 7) >> 3) - 11);

    try {
        if (text.length > maxLength) {
            let lt = text.match(/.{1,117}/g), ct = '';
            lt.forEach((entry) => { ct += k.encrypt(entry); });
            return ct;
        }

        return k.encrypt(text);
    } catch (ex) {
        console.warn('encryptLong error:', ex);

        return false;
    }
}

// 长文本解密处理
JSEncrypt.prototype.decryptLong = function (text) {
    let k = this.getKey();
    let maxLength = ((k.n.bitLength() + 7) >> 3);

    try {
        if (text.length > maxLength) {
            let lt = text.match(/.{1,256}/g), ct = '';
            lt.forEach((entry) => { ct += k.decrypt(entry); });
            return ct;
        }

        return k.decrypt(text);
    } catch (ex) {
        console.warn('decryptLong error:', ex);

        return false;
    }
}

// 加密
function RsaEncrypt(encrypted) {
    const encryptor = new JSEncrypt()
    encryptor.setPublicKey(publicKey)
    return encryptor.encryptLong(encrypted)
}

// 解密
function RsaDecrypt(encrypted) {
    const decrypt = new JSEncrypt()
    decrypt.setPrivateKey(privateKey)
    return decrypt.decryptLong(encrypted)
}

<<:  工程、生命周期阶段和过程(Engineering, Life Cycle Stages, and Processes)

>>:  k8s prometheus 监控多个MySql

Day4:Coroutine 的四大特点

在前一篇文章中,我们完成了一个 Coroutine 的程序,并且在最後我们发现了两个特点: 用 Co...

Day07,搭配gitlab-ci执行image auto build

正文 今天要设定gitlab上的专案,让他们能够在git commit时自动打包成docker im...

为什麽要使用VPN?综合3款VPN推荐给大家

最近有朋友回中国内地工作,刚好问我有什麽VPN推荐一下给他,需要在内地能翻墙,连脸书就可以了,了解他...

Day32. 范例:资料库连线(单例模式)

本文同步更新於blog 需求一:客户想要能与资料库连线的类别 <?php namespac...

用React刻自己的投资Dashboard Day28 - 串接台股技术面API

tags: 2021铁人赛 React 上一篇刻好版型後,这篇就可以来串接API拉,目标当然就是让使...