国密(sm2,sm3,sm4)

2,166 阅读1分钟

sm-crypto库(实际应用的时候后端解不出来所以用的gm-crypt库)

npm install sm-crypto

sm2加密使用

const sm2_main = require('sm-crypto').sm2

//获取密匙对
let keypair = sm2_main.generateKeyPairHex("1233241343223423");  //1233241343223423是规则
//获取公匙私匙(公匙用来加密 私匙用来解密)
let publicKey = keypair.publicKey; //公匙
let privateKey = keypair.privateKey; //私匙
const cipherMode = 0;

//加密
function doEncrypt(msg){
    return sm2_main.doEncrypt(msg, publicKey, cipherMode);
}

//解密 encryptData是doEncrypt返回的值
function doDecrypt(encryptData){
    return sm2_main.doDecrypt(msg, privateKey, cipherMode);
}

//例子
let encrypt=doEncrypt("123456", publicKey, cipherMode);
let decrypt=doDecrypt(encrypt);
console.log(encrypt);// 生成的随机密匙
console.log(decrypt);//123456

gm-crypt库

npm install gm-crypt

sm4加密使用

const SM4 = require("gm-crypt").sm4;
export default function (params) {
  if(typeof (params) == 'undefined'){
    params = null;
  }
  
 
  let sm4Config = {
    //配置sm4参数
    key: "kshop@ykshop.com",   //这里这个key值是跟后端要的
    mode: "cbc",     // 加密的方式有两种,ecb和cbc两种,也是看后端如何定义的,不过要是cbc的话下面还要加一个iv的参数,ecb不用
    iv:"kshop@ykshop.com",
    cipherType: "base64"
  };
  let sm4 = new SM4(sm4Config);
  let encryptData = sm4.encrypt(params);
 
  return encryptData.trim();
}