NodeRsa(创建秘钥,加密,解密)

70 阅读1分钟
const fs = require('fs');
const path = require('path');
const crypto = require('crypto');
const NodeRSA = require('node-rsa');
const cerPath = path.join(process.cwd(), './auth')


console.log(encrypt(123456));
function generateKeys () {
  //实例化秘钥位数
  const newkey = new NodeRSA({ b: 1024 });
  //设置加密方案
  newkey.setOptions({ encryptionScheme: 'pkcs1' })	//因为jsencrypt自身使用的是pkcs1加密方案,只有从后台改咯
  let public_key = newkey.exportKey('pkcs8-public')//公钥,
  let private_key = newkey.exportKey('pkcs8-private') //私钥
  //将秘钥写入文件
  fs.writeFileSync(path.join(cerPath, 'private.cer'), private_key);
  fs.writeFileSync(path.join(cerPath, 'public.cer'), public_key);
}
//加密
function encrypt (plain) {
  let public_key = fs.readFileSync(path.join(cerPath, 'public.cer'), 'utf8');
  private_key = fs.readFileSync(path.join(cerPath, 'private.cer'), 'utf8'); //私钥
  const nodersa = new NodeRSA(public_key);
  nodersa.setOptions({ encryptionScheme: 'pkcs1' });
  const encrypted = nodersa.encrypt(plain, 'base64');
  return encrypted;
}
//解密
function decrypt (cipher) {
  let public_key = fs.readFileSync(path.join(cerPath, 'public.cer'), 'utf8');
  private_key = fs.readFileSync(path.join(cerPath, 'private.cer'), 'utf8'); //私钥
  let pubkey = new NodeRSA(public_key),
    prikey = new NodeRSA(private_key);
  pubkey.setOptions({ encryptionScheme: 'pkcs1' });
  prikey.setOptions({ encryptionScheme: 'pkcs1' });
  return prikey.decrypt(cipher, 'utf8')
}


module.exports = {
  generateKeys,
  encrypt,
  decrypt
};