node-rsa 加减密与java rsa加减密 互调 相互加减密

注意:每次rsa加密产生的密文是不一样的,不同的密文解密可以得到相同的内容。

注意:每次rsa加密产生的密文是不一样的,不同的密文解密可以得到相同的内容。

1.公钥与私钥的生成

使用node-rsa来生成公钥与私钥

const NodeRSA = require('node-rsa');
var key = new NodeRSA({b: 2048});
var privateKey = key.exportKey("pkcs8-private");
var publicKey = key.exportKey("pkcs8-public-pem");
console.log(privateKey);
console.log(publicKey);

控制台输出如下所示:

-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQClZ7cjBeooF25z
LY4bkAGEL/Mq7vmxVOI8sPUifvaCWdmEDZJao40Jn4G+5P+3hkHpxzNt5wBbjC42
JNg+3Cqswd5v+aAXen3mHtrbE2qFcdgPz7/A2n0xjqp8mBxphFahFbguRURkp4AJ
W6xhinjcD/FoOr3yA2U7baaXAvONyuXU4iFxtcFea6FNzhyKtSZLR7HRcXayEDxR
cwcTJ0epLEfW1riVSf05yOI0NAxKbkdc8hteWoMiOJmRKn4hnBwQKupNmERZtn8I
VPrxTUt4ZwPTBQCtLBB5mULH2eduEY8vga3uaAbj7gEXF2o5EUejTriSY1B9MTp4
bFMEp3ADAgMBAAECggEAaLyrF89X/bkQpHhVQxjGDQk75pTaobLJa3r2Trisqc/x
T5A0e5aS6WQKiXGCh5jJRhpwc4hSDqZOYNSl5fAOScSdcLRV7mgPLtec6Bp8WjHD
igeYOatgmS/ovuqnGx3EqU4SiaIs87uo9MQK/NztORQTXlfMDWKfCKmfUoJ47PBk
jQ90xf/OHYvryv7F9ue+giv7g8o9SyyDy/uFGKsKIryMRifru9T4OTTNc9RA5hgg
BsKyrhvUsqttPc1ESZFPM6q9P3gkFoasZS6bBfyKZzqd7fg0brGGujDrayvXT4nV
dL1Qxu4gu/iWLO1XfdjMCSUhTeaMnFNgzl3+cfSKCQKBgQDzvkhvdQQZDvDZn9Zc
jlMlXHf2X8jYrDWj8PgZJJywAZNS7cVWQWT1LzHApadasWAaJT3QlHEVf/oxBJJ2
mpi/Ji3cqbLc+ILemD0eQk6+0+KED6mksU+0epM3C0npewR4mu+LdC4dMZ2sNx8x
x9oa50WATBsrcritrIjMUrmM5wKBgQCtuPt1tW2bxF9WxzzqQB5JMemy3udkBWLg
hjzTz9UG0XkxfwsLEKgD5qgkAIB8wOsM9JIW52hyDcDWHLzVAXkSWgIuGv7EP0l1
atmGWnjIP0sQ/GYu4MYTMYeq5de2w9iti+L0lgeaHjxB3ZXTPdVn4a1Z1sNCSCpV
rGRZ0TFkhQKBgB9sW6hK3LFiVLipu5gJHT0G08xmgt00LmIpUcLkDnM+cMDTOIqr
OZnGcNKWSKIPlgUo4fQ+/uk3q4igP0WdHq4d/PGiyxVj0HNkCxUYlVBSvrQp1MQP
u+fXmZ0SDoBURLpLtzAyVTOcTuiB3rqrOjoXsMUeiq4qRxbU1HoK/DLnAoGBAIkH
NmH8f760QLeEZIoplToLAtmydTYyAXI0sFoqv0+nfz8JhL5vnvekws/TDYZZ7Y3E
hE9IrNv5+TdqZ5BknwlYsguIA5jsipbxdy9AwbDCLAXz8O3dIqAVG3wz29kv1gPe
KWDfzpNEcidKD1oWlfRg0InimxX3Ml1to6ItHha5AoGAANfN73LBhFbu5mg1UJMJ
MBK4+EPTw6U6//KVX2Z9eL0T8dLOwJocxgCMp+3ZOE0YFGwJ02L6r6+LLXO+3i9L
0QmHIr3MlIsI/CnUKM2OB7DRNNlTXPlEoSvG2jEJXV91wYUzz59Py8Ksz8npCox/
YZcW7Bim5OeLhZi6W1XwdeQ=
-----END PRIVATE KEY-----
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApWe3IwXqKBducy2OG5AB
hC/zKu75sVTiPLD1In72glnZhA2SWqONCZ+BvuT/t4ZB6cczbecAW4wuNiTYPtwq
rMHeb/mgF3p95h7a2xNqhXHYD8+/wNp9MY6qfJgcaYRWoRW4LkVEZKeACVusYYp4
3A/xaDq98gNlO22mlwLzjcrl1OIhcbXBXmuhTc4cirUmS0ex0XF2shA8UXMHEydH
qSxH1ta4lUn9OcjiNDQMSm5HXPIbXlqDIjiZkSp+IZwcECrqTZhEWbZ/CFT68U1L
eGcD0wUArSwQeZlCx9nnbhGPL4Gt7mgG4+4BFxdqORFHo064kmNQfTE6eGxTBKdw
AwIDAQAB
-----END PUBLIC KEY-----

将公钥与私钥进行存储。

2.使用node-rsa来进行加减密

const NodeRSA = require('node-rsa');
var publicKey = '-----BEGIN PUBLIC KEY-----\n' +
    'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApWe3IwXqKBducy2OG5AB\n' +
    'hC/zKu75sVTiPLD1In72glnZhA2SWqONCZ+BvuT/t4ZB6cczbecAW4wuNiTYPtwq\n' +
    'rMHeb/mgF3p95h7a2xNqhXHYD8+/wNp9MY6qfJgcaYRWoRW4LkVEZKeACVusYYp4\n' +
    '3A/xaDq98gNlO22mlwLzjcrl1OIhcbXBXmuhTc4cirUmS0ex0XF2shA8UXMHEydH\n' +
    'qSxH1ta4lUn9OcjiNDQMSm5HXPIbXlqDIjiZkSp+IZwcECrqTZhEWbZ/CFT68U1L\n' +
    'eGcD0wUArSwQeZlCx9nnbhGPL4Gt7mgG4+4BFxdqORFHo064kmNQfTE6eGxTBKdw\n' +
    'AwIDAQAB\n' +
    '-----END PUBLIC KEY-----';
var privateKey = '-----BEGIN PRIVATE KEY-----\n' +
    'MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQClZ7cjBeooF25z\n' +
    'LY4bkAGEL/Mq7vmxVOI8sPUifvaCWdmEDZJao40Jn4G+5P+3hkHpxzNt5wBbjC42\n' +
    'JNg+3Cqswd5v+aAXen3mHtrbE2qFcdgPz7/A2n0xjqp8mBxphFahFbguRURkp4AJ\n' +
    'W6xhinjcD/FoOr3yA2U7baaXAvONyuXU4iFxtcFea6FNzhyKtSZLR7HRcXayEDxR\n' +
    'cwcTJ0epLEfW1riVSf05yOI0NAxKbkdc8hteWoMiOJmRKn4hnBwQKupNmERZtn8I\n' +
    'VPrxTUt4ZwPTBQCtLBB5mULH2eduEY8vga3uaAbj7gEXF2o5EUejTriSY1B9MTp4\n' +
    'bFMEp3ADAgMBAAECggEAaLyrF89X/bkQpHhVQxjGDQk75pTaobLJa3r2Trisqc/x\n' +
    'T5A0e5aS6WQKiXGCh5jJRhpwc4hSDqZOYNSl5fAOScSdcLRV7mgPLtec6Bp8WjHD\n' +
    'igeYOatgmS/ovuqnGx3EqU4SiaIs87uo9MQK/NztORQTXlfMDWKfCKmfUoJ47PBk\n' +
    'jQ90xf/OHYvryv7F9ue+giv7g8o9SyyDy/uFGKsKIryMRifru9T4OTTNc9RA5hgg\n' +
    'BsKyrhvUsqttPc1ESZFPM6q9P3gkFoasZS6bBfyKZzqd7fg0brGGujDrayvXT4nV\n' +
    'dL1Qxu4gu/iWLO1XfdjMCSUhTeaMnFNgzl3+cfSKCQKBgQDzvkhvdQQZDvDZn9Zc\n' +
    'jlMlXHf2X8jYrDWj8PgZJJywAZNS7cVWQWT1LzHApadasWAaJT3QlHEVf/oxBJJ2\n' +
    'mpi/Ji3cqbLc+ILemD0eQk6+0+KED6mksU+0epM3C0npewR4mu+LdC4dMZ2sNx8x\n' +
    'x9oa50WATBsrcritrIjMUrmM5wKBgQCtuPt1tW2bxF9WxzzqQB5JMemy3udkBWLg\n' +
    'hjzTz9UG0XkxfwsLEKgD5qgkAIB8wOsM9JIW52hyDcDWHLzVAXkSWgIuGv7EP0l1\n' +
    'atmGWnjIP0sQ/GYu4MYTMYeq5de2w9iti+L0lgeaHjxB3ZXTPdVn4a1Z1sNCSCpV\n' +
    'rGRZ0TFkhQKBgB9sW6hK3LFiVLipu5gJHT0G08xmgt00LmIpUcLkDnM+cMDTOIqr\n' +
    'OZnGcNKWSKIPlgUo4fQ+/uk3q4igP0WdHq4d/PGiyxVj0HNkCxUYlVBSvrQp1MQP\n' +
    'u+fXmZ0SDoBURLpLtzAyVTOcTuiB3rqrOjoXsMUeiq4qRxbU1HoK/DLnAoGBAIkH\n' +
    'NmH8f760QLeEZIoplToLAtmydTYyAXI0sFoqv0+nfz8JhL5vnvekws/TDYZZ7Y3E\n' +
    'hE9IrNv5+TdqZ5BknwlYsguIA5jsipbxdy9AwbDCLAXz8O3dIqAVG3wz29kv1gPe\n' +
    'KWDfzpNEcidKD1oWlfRg0InimxX3Ml1to6ItHha5AoGAANfN73LBhFbu5mg1UJMJ\n' +
    'MBK4+EPTw6U6//KVX2Z9eL0T8dLOwJocxgCMp+3ZOE0YFGwJ02L6r6+LLXO+3i9L\n' +
    '0QmHIr3MlIsI/CnUKM2OB7DRNNlTXPlEoSvG2jEJXV91wYUzz59Py8Ksz8npCox/\n' +
    'YZcW7Bim5OeLhZi6W1XwdeQ=\n' +
    '-----END PRIVATE KEY-----';
var key = new NodeRSA();
key.importKey(privateKey,"pkcs8-private");
key.importKey(publicKey,"pkcs8-public-pem");

const text = 'Hello World!Hello World!Hello World!Hello World!Hello World!Hello World!Hello World!Hello World!Hello World!Hello World!';
const encrypted = key.encrypt(text, 'base64');
console.log('encrypted: ', encrypted);
const decrypted = key.decrypt(encrypted, 'utf8');
console.log('decrypted: ', decrypted);

控制台输出如下所示:

encrypted:  mrP7jADPSqGE2k8vigWImq06iYWHqcgUSQ4p8xbR5AzVPAafPAMmUB8vtrUxIT6VsVd/5rECxWswDREzZVSyl5JsfFlYbmXFxD+ZAwA/6dqvN6aaJ7HX4haRnB3QwENRRmWlnxOPOa99tewTCzOo7KrYRNswKX/dJPQhQldSFzvDKwj/4cVmJ0GBcnh0TMf+twubN+WBAcCX7XovTFeadrzOTKbh3MFtgrG78Ru+A34DQV10kinXCawIwC583WXd+nnH9iEGSUYDVrYgbQcAlBgnrXX46T56/peD0PemYDGFdnsyo8ANtY691KzoXWl53LxKdar78kwRZKsAwn/97Q==
decrypted:  Hello World!Hello World!Hello World!Hello World!Hello World!Hello World!Hello World!Hello World!Hello World!Hello World!

3.使用Java来进行加减密

import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import java.io.UnsupportedEncodingException;
import java.security.*;
import java.security.interfaces.RSAPrivateKey;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import java.util.Base64;

public class TestRSA {

    public static void main(String[] args) throws NoSuchAlgorithmException, InvalidKeySpecException, NoSuchPaddingException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException, UnsupportedEncodingException {
        TestRSA testRSA = new TestRSA();
        String data = "Hello World!Hello World!Hello World!Hello World!Hello World!Hello World!Hello World!Hello World!Hello World!Hello World!";
        System.out.println(testRSA.encrypt(data));
        System.out.println(testRSA.decrypt(testRSA.encrypt(data)));
    }


    private String encrypt(String data) throws NoSuchAlgorithmException, InvalidKeySpecException, NoSuchPaddingException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException {
        byte[] dataBytes = data.getBytes();
        if (dataBytes.length > 214) throw new RuntimeException("不能一次性加密超过214字节的数据");
        String pubKey =
                "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApWe3IwXqKBducy2OG5AB" +
                        "hC/zKu75sVTiPLD1In72glnZhA2SWqONCZ+BvuT/t4ZB6cczbecAW4wuNiTYPtwq" +
                        "rMHeb/mgF3p95h7a2xNqhXHYD8+/wNp9MY6qfJgcaYRWoRW4LkVEZKeACVusYYp4" +
                        "3A/xaDq98gNlO22mlwLzjcrl1OIhcbXBXmuhTc4cirUmS0ex0XF2shA8UXMHEydH" +
                        "qSxH1ta4lUn9OcjiNDQMSm5HXPIbXlqDIjiZkSp+IZwcECrqTZhEWbZ/CFT68U1L" +
                        "eGcD0wUArSwQeZlCx9nnbhGPL4Gt7mgG4+4BFxdqORFHo064kmNQfTE6eGxTBKdw" +
                        "AwIDAQAB";
        Base64.Decoder decoder = Base64.getDecoder();
        byte[] keyBytes = decoder.decode(pubKey);
        X509EncodedKeySpec spec = new X509EncodedKeySpec(keyBytes);
        KeyFactory kf = KeyFactory.getInstance("RSA");
        PublicKey pk = kf.generatePublic(spec);

        byte[] cipherText;
        Cipher cipher = Cipher.getInstance("RSA/ECB/OAEPWithSHA1AndMGF1Padding");
        cipher.init(Cipher.ENCRYPT_MODE, pk);
        cipherText = cipher.doFinal(dataBytes);
        Base64.Encoder encoder = Base64.getEncoder();
        return encoder.encodeToString(cipherText);
    }

    private String decrypt(String data) throws NoSuchAlgorithmException, InvalidKeySpecException, NoSuchPaddingException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException, UnsupportedEncodingException {
        String privateKey =
                "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQClZ7cjBeooF25z" +
                        "LY4bkAGEL/Mq7vmxVOI8sPUifvaCWdmEDZJao40Jn4G+5P+3hkHpxzNt5wBbjC42" +
                        "JNg+3Cqswd5v+aAXen3mHtrbE2qFcdgPz7/A2n0xjqp8mBxphFahFbguRURkp4AJ" +
                        "W6xhinjcD/FoOr3yA2U7baaXAvONyuXU4iFxtcFea6FNzhyKtSZLR7HRcXayEDxR" +
                        "cwcTJ0epLEfW1riVSf05yOI0NAxKbkdc8hteWoMiOJmRKn4hnBwQKupNmERZtn8I" +
                        "VPrxTUt4ZwPTBQCtLBB5mULH2eduEY8vga3uaAbj7gEXF2o5EUejTriSY1B9MTp4" +
                        "bFMEp3ADAgMBAAECggEAaLyrF89X/bkQpHhVQxjGDQk75pTaobLJa3r2Trisqc/x" +
                        "T5A0e5aS6WQKiXGCh5jJRhpwc4hSDqZOYNSl5fAOScSdcLRV7mgPLtec6Bp8WjHD" +
                        "igeYOatgmS/ovuqnGx3EqU4SiaIs87uo9MQK/NztORQTXlfMDWKfCKmfUoJ47PBk" +
                        "jQ90xf/OHYvryv7F9ue+giv7g8o9SyyDy/uFGKsKIryMRifru9T4OTTNc9RA5hgg" +
                        "BsKyrhvUsqttPc1ESZFPM6q9P3gkFoasZS6bBfyKZzqd7fg0brGGujDrayvXT4nV" +
                        "dL1Qxu4gu/iWLO1XfdjMCSUhTeaMnFNgzl3+cfSKCQKBgQDzvkhvdQQZDvDZn9Zc" +
                        "jlMlXHf2X8jYrDWj8PgZJJywAZNS7cVWQWT1LzHApadasWAaJT3QlHEVf/oxBJJ2" +
                        "mpi/Ji3cqbLc+ILemD0eQk6+0+KED6mksU+0epM3C0npewR4mu+LdC4dMZ2sNx8x" +
                        "x9oa50WATBsrcritrIjMUrmM5wKBgQCtuPt1tW2bxF9WxzzqQB5JMemy3udkBWLg" +
                        "hjzTz9UG0XkxfwsLEKgD5qgkAIB8wOsM9JIW52hyDcDWHLzVAXkSWgIuGv7EP0l1" +
                        "atmGWnjIP0sQ/GYu4MYTMYeq5de2w9iti+L0lgeaHjxB3ZXTPdVn4a1Z1sNCSCpV" +
                        "rGRZ0TFkhQKBgB9sW6hK3LFiVLipu5gJHT0G08xmgt00LmIpUcLkDnM+cMDTOIqr" +
                        "OZnGcNKWSKIPlgUo4fQ+/uk3q4igP0WdHq4d/PGiyxVj0HNkCxUYlVBSvrQp1MQP" +
                        "u+fXmZ0SDoBURLpLtzAyVTOcTuiB3rqrOjoXsMUeiq4qRxbU1HoK/DLnAoGBAIkH" +
                        "NmH8f760QLeEZIoplToLAtmydTYyAXI0sFoqv0+nfz8JhL5vnvekws/TDYZZ7Y3E" +
                        "hE9IrNv5+TdqZ5BknwlYsguIA5jsipbxdy9AwbDCLAXz8O3dIqAVG3wz29kv1gPe" +
                        "KWDfzpNEcidKD1oWlfRg0InimxX3Ml1to6ItHha5AoGAANfN73LBhFbu5mg1UJMJ" +
                        "MBK4+EPTw6U6//KVX2Z9eL0T8dLOwJocxgCMp+3ZOE0YFGwJ02L6r6+LLXO+3i9L" +
                        "0QmHIr3MlIsI/CnUKM2OB7DRNNlTXPlEoSvG2jEJXV91wYUzz59Py8Ksz8npCox/" +
                        "YZcW7Bim5OeLhZi6W1XwdeQ=";
        //64位解码加密后的字符串
        Base64.Decoder decoder = Base64.getDecoder();
        byte[] inputByte = decoder.decode(data.getBytes("UTF-8"));
        //base64编码的私钥
        byte[] decoded = decoder.decode(privateKey);
        RSAPrivateKey priKey = (RSAPrivateKey) KeyFactory.getInstance("RSA").generatePrivate(new PKCS8EncodedKeySpec(decoded));
        //RSA解密
        Cipher cipher = Cipher.getInstance("RSA/ECB/OAEPWithSHA1AndMGF1Padding");
        cipher.init(Cipher.DECRYPT_MODE, priKey);
        return new String(cipher.doFinal(inputByte));
    }
}

控制台输出如下所示:

lsFkcMewpiH2V6znNHV+ccqmpqbAC17aSZ5noEEg7djxXUcCEMx1EmUYKsXeolWIvXlh0D+OxGLVc1z5uCGwMFve9BOvGRyjkMSXFrsvvTxlqc4diZZ1wAmcRd9sKnYFD1LB/k3ewJkSHAj5ejmdANXXOtRuiqtyhWzbmIpmzpNfsywF1nkjJvuuOWipQXeh/+BtQyxMrASVg9mBA/8QWb7ovfW7MpbxW8Chtsb/BBTqbAACaY7LZ2oIeK0FN27lpUojEqL5/1LFv2GGrK/XK0GWnp00SAaGS/N4AkTbQ9Ba8wgO8xKyTRbhZgDoPpi5uJPbsW0aDzONPEJliPQCVA==
Hello World!Hello World!Hello World!Hello World!Hello World!Hello World!Hello World!Hello World!Hello World!Hello World!

4.node-rsa 于 java rsa 加减密互调

4.1使用Java调用node加密的内容:

    将java文件的main函数改为:

    public static void main(String[] args) throws NoSuchAlgorithmException, InvalidKeySpecException, NoSuchPaddingException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException, UnsupportedEncodingException {
        TestRSA testRSA = new TestRSA();
        System.out.println(testRSA.decrypt("mrP7jADPSqGE2k8vigWImq06iYWHqcgUSQ4p8xbR5AzVPAafPAMmUB8vtrUxIT6VsVd/5rECxWswDREzZVSyl5JsfFlYbmXFxD+ZAwA/6dqvN6aaJ7HX4haRnB3QwENRRmWlnxOPOa99tewTCzOo7KrYRNswKX/dJPQhQldSFzvDKwj/4cVmJ0GBcnh0TMf+twubN+WBAcCX7XovTFeadrzOTKbh3MFtgrG78Ru+A34DQV10kinXCawIwC583WXd+nnH9iEGSUYDVrYgbQcAlBgnrXX46T56/peD0PemYDGFdnsyo8ANtY691KzoXWl53LxKdar78kwRZKsAwn/97Q=="));
    }

控制台输出如下:

Hello World!Hello World!Hello World!Hello World!Hello World!Hello World!Hello World!Hello World!Hello World!Hello World!

4.2使用node调用java加密的内容:

const NodeRSA = require('node-rsa');
var publicKey = '-----BEGIN PUBLIC KEY-----\n' +
    'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApWe3IwXqKBducy2OG5AB\n' +
    'hC/zKu75sVTiPLD1In72glnZhA2SWqONCZ+BvuT/t4ZB6cczbecAW4wuNiTYPtwq\n' +
    'rMHeb/mgF3p95h7a2xNqhXHYD8+/wNp9MY6qfJgcaYRWoRW4LkVEZKeACVusYYp4\n' +
    '3A/xaDq98gNlO22mlwLzjcrl1OIhcbXBXmuhTc4cirUmS0ex0XF2shA8UXMHEydH\n' +
    'qSxH1ta4lUn9OcjiNDQMSm5HXPIbXlqDIjiZkSp+IZwcECrqTZhEWbZ/CFT68U1L\n' +
    'eGcD0wUArSwQeZlCx9nnbhGPL4Gt7mgG4+4BFxdqORFHo064kmNQfTE6eGxTBKdw\n' +
    'AwIDAQAB\n' +
    '-----END PUBLIC KEY-----';
var privateKey = '-----BEGIN PRIVATE KEY-----\n' +
    'MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQClZ7cjBeooF25z\n' +
    'LY4bkAGEL/Mq7vmxVOI8sPUifvaCWdmEDZJao40Jn4G+5P+3hkHpxzNt5wBbjC42\n' +
    'JNg+3Cqswd5v+aAXen3mHtrbE2qFcdgPz7/A2n0xjqp8mBxphFahFbguRURkp4AJ\n' +
    'W6xhinjcD/FoOr3yA2U7baaXAvONyuXU4iFxtcFea6FNzhyKtSZLR7HRcXayEDxR\n' +
    'cwcTJ0epLEfW1riVSf05yOI0NAxKbkdc8hteWoMiOJmRKn4hnBwQKupNmERZtn8I\n' +
    'VPrxTUt4ZwPTBQCtLBB5mULH2eduEY8vga3uaAbj7gEXF2o5EUejTriSY1B9MTp4\n' +
    'bFMEp3ADAgMBAAECggEAaLyrF89X/bkQpHhVQxjGDQk75pTaobLJa3r2Trisqc/x\n' +
    'T5A0e5aS6WQKiXGCh5jJRhpwc4hSDqZOYNSl5fAOScSdcLRV7mgPLtec6Bp8WjHD\n' +
    'igeYOatgmS/ovuqnGx3EqU4SiaIs87uo9MQK/NztORQTXlfMDWKfCKmfUoJ47PBk\n' +
    'jQ90xf/OHYvryv7F9ue+giv7g8o9SyyDy/uFGKsKIryMRifru9T4OTTNc9RA5hgg\n' +
    'BsKyrhvUsqttPc1ESZFPM6q9P3gkFoasZS6bBfyKZzqd7fg0brGGujDrayvXT4nV\n' +
    'dL1Qxu4gu/iWLO1XfdjMCSUhTeaMnFNgzl3+cfSKCQKBgQDzvkhvdQQZDvDZn9Zc\n' +
    'jlMlXHf2X8jYrDWj8PgZJJywAZNS7cVWQWT1LzHApadasWAaJT3QlHEVf/oxBJJ2\n' +
    'mpi/Ji3cqbLc+ILemD0eQk6+0+KED6mksU+0epM3C0npewR4mu+LdC4dMZ2sNx8x\n' +
    'x9oa50WATBsrcritrIjMUrmM5wKBgQCtuPt1tW2bxF9WxzzqQB5JMemy3udkBWLg\n' +
    'hjzTz9UG0XkxfwsLEKgD5qgkAIB8wOsM9JIW52hyDcDWHLzVAXkSWgIuGv7EP0l1\n' +
    'atmGWnjIP0sQ/GYu4MYTMYeq5de2w9iti+L0lgeaHjxB3ZXTPdVn4a1Z1sNCSCpV\n' +
    'rGRZ0TFkhQKBgB9sW6hK3LFiVLipu5gJHT0G08xmgt00LmIpUcLkDnM+cMDTOIqr\n' +
    'OZnGcNKWSKIPlgUo4fQ+/uk3q4igP0WdHq4d/PGiyxVj0HNkCxUYlVBSvrQp1MQP\n' +
    'u+fXmZ0SDoBURLpLtzAyVTOcTuiB3rqrOjoXsMUeiq4qRxbU1HoK/DLnAoGBAIkH\n' +
    'NmH8f760QLeEZIoplToLAtmydTYyAXI0sFoqv0+nfz8JhL5vnvekws/TDYZZ7Y3E\n' +
    'hE9IrNv5+TdqZ5BknwlYsguIA5jsipbxdy9AwbDCLAXz8O3dIqAVG3wz29kv1gPe\n' +
    'KWDfzpNEcidKD1oWlfRg0InimxX3Ml1to6ItHha5AoGAANfN73LBhFbu5mg1UJMJ\n' +
    'MBK4+EPTw6U6//KVX2Z9eL0T8dLOwJocxgCMp+3ZOE0YFGwJ02L6r6+LLXO+3i9L\n' +
    '0QmHIr3MlIsI/CnUKM2OB7DRNNlTXPlEoSvG2jEJXV91wYUzz59Py8Ksz8npCox/\n' +
    'YZcW7Bim5OeLhZi6W1XwdeQ=\n' +
    '-----END PRIVATE KEY-----';
var key = new NodeRSA();
key.importKey(privateKey,"pkcs8-private");
key.importKey(publicKey,"pkcs8-public-pem");


const decrypted = key.decrypt('lsFkcMewpiH2V6znNHV+ccqmpqbAC17aSZ5noEEg7djxXUcCEMx1EmUYKsXeolWIvXlh0D+OxGLVc1z5uCGwMFve9BOvGRyjkMSXFrsvvTxlqc4diZZ1wAmcRd9sKnYFD1LB/k3ewJkSHAj5ejmdANXXOtRuiqtyhWzbmIpmzpNfsywF1nkjJvuuOWipQXeh/+BtQyxMrASVg9mBA/8QWb7ovfW7MpbxW8Chtsb/BBTqbAACaY7LZ2oIeK0FN27lpUojEqL5/1LFv2GGrK/XK0GWnp00SAaGS/N4AkTbQ9Ba8wgO8xKyTRbhZgDoPpi5uJPbsW0aDzONPEJliPQCVA==', 'utf8');
console.log('decrypted: ', decrypted);

控制台输出为:

decrypted:  Hello World!Hello World!Hello World!Hello World!Hello World!Hello World!Hello World!Hello World!Hello World!Hello World!

注意事项:

1.每次rsa加密产生的密文是不一样的,不同的密文解密可以得到相同的内容。如连续对同一对象(Hello World!Hello World!Hello World!Hello World!Hello World!Hello World!Hello World!Hello World!Hello World!Hello World!)运行两次加密运算得到结果如下:

第一次:

mrP7jADPSqGE2k8vigWImq06iYWHqcgUSQ4p8xbR5AzVPAafPAMmUB8vtrUxIT6VsVd/5rECxWswDREzZVSyl5JsfFlYbmXFxD+ZAwA/6dqvN6aaJ7HX4haRnB3QwENRRmWlnxOPOa99tewTCzOo7KrYRNswKX/dJPQhQldSFzvDKwj/4cVmJ0GBcnh0TMf+twubN+WBAcCX7XovTFeadrzOTKbh3MFtgrG78Ru+A34DQV10kinXCawIwC583WXd+nnH9iEGSUYDVrYgbQcAlBgnrXX46T56/peD0PemYDGFdnsyo8ANtY691KzoXWl53LxKdar78kwRZKsAwn/97Q==

第二次:

lgztt7wbgVSv7jEg9hrZ1WSPgGhX9dK2r3CEhw1R6cNxbjkFhi2c8HtJIgF96Y9xCNtZScKBa1gI9cD50IPV1FAo5Cm5IIf0Z7RxsYFkmDuCXpHWJS0fmgPf162lhQiGfDhZCnCCNu/8vsLAMnTDk5tpH/V6FMc4RTfzYMRALd6KurN7IUD1bpF8yzw8/KhkITFKV/+k3p3ft+3y7CMyoNigo+/yrqpeVTKek/V1UEINw/eAQGLaeLa58QSNXLFZ4Q53suUmxAfNz+7wzG/EmQ2MBVu6ofuGYZ/bcaCH7PF4mjnwKqCLuHlzP3NSsCsoxtF+8bGK/1eDRwlLGRix+A==

2.rsa加密的内容有长度的限制 密钥的长度越长内容可以越长,如需要对较长内容进行加密需要进行分段处理。

3.java支持pkcs8 node里加密的配置需要与java的一致才能进行有效相互加减密不能随意更改配置(本文代码已完成相应的配置)

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值