業務邏輯須要使用 NodeJS 進行公鑰加密傳輸給 Java 後端進行私鑰解密,可是默認 NodeJS 使用的 RSA padding 模式與 Java 的不一致,因此須要配置。node
不囉嗦,上代碼,分別用 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'));
使用 public_key
加密 buffer
。目前僅支持 RSA。ui
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
模塊.spa
使用 private_key
來解密 buffer
.code
private_key
:對象
key
: 包含有 PEM 編碼的私鑰passphrase
: 私鑰的密碼padding
: 填充值,以下:
constants.RSA_NO_PADDING
constants.RSA_PKCS1_PADDING
constants.RSA_PKCS1_OAEP_PADDING
注意: 全部的填充值 定義於constants
模塊.utf-8