【HAVENT原創】NodeJS 兩個模塊進行 RSA 加密解密(匹配Java RSA)

業務邏輯須要使用 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'));

 

crypto.publicEncrypt(public_key, buffer)

使用 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

crypto.privateDecrypt(private_key, buffer)

使用 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

相關文章
相關標籤/搜索