前端sm2国密加密解密

1.下载国密包

npm i sm-crypto

2.获取后端的公钥注sm-crypto使用BC库加解密前端密钥与后端密钥是两队,非常规的base64密钥
前端公钥需要在前面加04占位否则无法解密

// 前端公钥
const publicKey ='0453bac6d2499e427529b3fcd213c33fed87a596d27c52334d457c222c729727925bae7bd7937b2dee449303faf69f128ea7530994d7a9e1272e14e6efef5437ca';
// 前端私钥
const privateKey ='009c2d9397afd38f5fe46d85611f55ebb8118c3b148d51fe8cc26a509215d49a33'
// 后端公钥
const publicKey ='MFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAEq+OqrQd71xbWD50ks7zfikU7ec64O8fp0d6yuEbadmURoZl4P07I1aEm4bjGvxmP6XP65tqNJWgTDomLhvrpUQ==';
// 后端私钥
const privateKey ='MIGTAgEAMBMGByqGSM49AgEGCCqBHM9VAYItBHkwdwIBAQQgn1ABWedtUoujWXCCwMfKnCXLgj1riMWf/S2SB6xodZKgCgYIKoEcz1UBgi2hRANCAASr46qtB3vXFtYPnSSzvN+KRTt5zrg7x+nR3rK4Rtp2ZRGhmXg/TsjVoSbhuMa/GY/pc/rm2o0laBMOiYuG+ulR'

java 密钥生成方式
SM2 sm2 = SmUtil.sm2();
String privateKey = sm2.getPrivateKeyBase64();  // 私钥
String publicKey = sm2.getPublicKeyBase64();  // 公钥
String privateQKey = HexUtil.encodeHexStr(BCUtil.encodeECPrivateKey(sm2.getPrivateKey()));  // 前端使用的私钥
String publicQKey = HexUtil.encodeHexStr(((BCECPublicKey) sm2.getPublicKey()).getQ().getEncoded(false));  // 前端使用的公钥

3.前端使用公钥进行加密

  • 生成的加密串加04方便后端解密

    /**

    • 国密sm2加密
    • @param str 需要加密的文本
    • @param publicKey 公钥
    • @param cipherMode sm2的加解密时有两种方式即0——C1C2C3、1——C1C3C2,前后端需要统一
    • @returns 加密后的数据
      */
      export function sm2Encryption(str: string, publicKey: string = Global.commonPubilcKey,cipherMode =1) {
      const sm2 = smCrypto.sm2;
      // 加密
      return sm2.doEncrypt(str, publicKey,cipherMode );
      }

4.前端使用私钥解密

/**
 * TODO: 国密sm2解密
 * @param privateKey 前端私钥
 * @param cipherMode sm2的加解密时有两种方式即0——C1C2C3、1——C1C3C2,前后端需要统一
 * @returns 解密后的数据
 */
export function sm2DoDecrypt(
  data: string,
  privateKey: string = Global.privateKey,
  cipherMode =1
) {
  const sm2 = smCrypto.sm2;
  // 解密
  return sm2.doDecrypt(data, privateKey, cipherMode );
}

网络安全工程师(白帽子)企业级学习路线

第一阶段:安全基础(入门)

img

第二阶段:Web渗透(初级网安工程师)

img

第三阶段:进阶部分(中级网络安全工程师)

img

如果你对网络安全入门感兴趣,那么你需要的话可以点击这里👉网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!

学习资源分享

  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值