java rsa模块_【HAVENT原创】NodeJS 两个模块进行 RSA 加密解密(匹配Java RSA)

业务逻辑需要使用 NodeJS 进行公钥加密传输给 Java 后端进行私钥解密,但是默认 NodeJS 使用的 RSA padding 模式与 Java 的不一致,所以需要配置。

不啰嗦,上代码,分别用 crypto和 node-rsa进行了加解密实验!

const crypto = require('crypto');

const NodeRSA = require('node-rsa');

let inputString = '我是明文字符串!';

let publicKeyStr = '-----BEGIN PUBLIC KEY-----\n' +

'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCe8g647gv...\n' +

'-----END PUBLIC KEY-----';

let privateKeyStr = '-----BEGIN PRIVATE KEY-----\n' +

'MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGB...\n' +

'-----END PRIVATE KEY-----';

let key = new NodeRSA(publicKeyStr);

key.setOptions({encryptionScheme: 'pkcs1'});

let encryptStr = key.encrypt(inputString, 'base64');

console.log(encryptStr);

key.importKey(privateKeyStr, 'pkcs8-private');

console.log(key.decrypt(encryptStr, 'utf8'));

encryptStr = crypto.publicEncrypt({key:publicKeyStr, padding: crypto.constants.RSA_PKCS1_PADDING}, Buffer.from(inputString, 'utf8'));

console.log(encryptStr.toString('base64'));

let decryptStr = crypto.privateDecrypt({key:privateKeyStr, padding: crypto.constants.RSA_PKCS1_PADDING}, encryptStr);

console.log(decryptStr.toString('utf-8'));

crypto.publicEncrypt(public_key, buffer)

使用 public_key 加密 buffer。目前仅支持 RSA。

public_key 可以是对象或字符串。如果 public_key 是一个字符串,将会当做没有密码的key,并会用RSA_PKCS1_OAEP_PADDING。

public_key:

key : 包含有 PEM 编码的私钥。

padding : 填充值,如下

constants.RSA_NO_PADDING

constants.RSA_PKCS1_PADDING

constants.RSA_PKCS1_OAEP_PADDING

注意: 所有的填充值 定义于constants 模块.

crypto.privateDecrypt(private_key, buffer)

使用 private_key 来解密 buffer.

private_key:

key : 包含有 PEM 编码的私钥

passphrase : 私钥的密码

padding : 填充值,如下:

constants.RSA_NO_PADDING

constants.RSA_PKCS1_PADDING

constants.RSA_PKCS1_OAEP_PADDING

注意: 所有的填充值 定义于constants 模块.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RSA算法是一种非对称加密算法,其中公钥可以用于加密数据,私钥则用于解密数据。而OAEP(Optimal Asymmetric Encryption Padding)是RSA算法加密时的一种填充方式,用于增加加密的安全性。在Java中,可以使用Java Cryptography Extension(JCE)提供的API来实现RSA算法和OAEP填充方式的加密解密操作。以下是一个使用RSA算法和OAEP填充方式进行加密Java示例代码: ```java import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.PublicKey; import java.security.PrivateKey; import javax.crypto.Cipher; public class RSAEncryptor { private static final String RSA_ALGORITHM = "RSA/ECB/OAEPWithSHA-256AndMGF1Padding"; public static void main(String[] args) throws Exception { String plainText = "Hello, world!"; KeyPair keyPair = KeyPairGenerator.getInstance("RSA").generateKeyPair(); PublicKey publicKey = keyPair.getPublic(); PrivateKey privateKey = keyPair.getPrivate(); byte[] encryptedData = encrypt(plainText.getBytes(), publicKey); byte[] decryptedData = decrypt(encryptedData, privateKey); System.out.println("Plaintext: " + plainText); System.out.println("Encrypted data: " + new String(encryptedData)); System.out.println("Decrypted data: " + new String(decryptedData)); } public static byte[] encrypt(byte[] data, PublicKey publicKey) throws Exception { Cipher cipher = Cipher.getInstance(RSA_ALGORITHM); cipher.init(Cipher.ENCRYPT_MODE, publicKey); return cipher.doFinal(data); } public static byte[] decrypt(byte[] data, PrivateKey privateKey) throws Exception { Cipher cipher = Cipher.getInstance(RSA_ALGORITHM); cipher.init(Cipher.DECRYPT_MODE, privateKey); return cipher.doFinal(data); } } ``` 在这个示例代码中,我们使用KeyPairGenerator生成一个RSA密钥对,然后使用公钥加密一个字符串,最后使用私钥解密该字符串。注意,我们使用的RSA算法的填充方式为“OAEPWithSHA-256AndMGF1Padding”,这是一种较为安全的填充方式,可以提高加密的安全性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值