import org.bouncycastle.crypto.engines.SM2Engine;

/**

  • 简单单例SM2加解密, 配合前端
    */
    public class LoSM2 {

private static String ECNameModel = “sm2p256v1”;
private static SM2Engine.Mode CipherMode = SM2Engine.Mode.C1C3C2;
private final String privateKey;
private final String publicKey;

private LoSM2(String privateKey, String publicKey){
this.privateKey = privateKey;
this.publicKey = publicKey;
}

private volatile static LoSM2 instance = null;

public static LoSM2 getInstance(){
if(instance == null){
throw new RuntimeException(“请InitKey初始化密钥!!!”);
}
return instance;
}

/**

  • SM2初始密钥(私钥,公钥)
  • @param privateKey
  • @param publicKey
  • @return
    */
    public static LoSM2 InitKey(String privateKey, String publicKey) {
    if(instance == null){
    synchronized(LoSM2.class){
    if(instance == null){
    instance = new LoSM2(privateKey, publicKey);
    }
    }
    }
    return instance;
    }

private static class SM2SimpSelfLoader {
private static final LoSM2 instance = InitKey(“”, “”);
}

private static boolean IsInitKey(){
if(instance == null) {
throw new RuntimeException(“请InitKey初始化密钥!!!”);
}else {
return true;
}
}

/**

  • SM2加密
  • @param cleartext 明文数据
    */
    public String encrypt(String cleartext) {
    if(!IsInitKey())
    return “”;
    return SimpSM2Util.encrypt(instance.publicKey, cleartext);
    }

/**

  • SM2解密
  • @param cipherData 密文数据
    */
    public static String decrypt(String cipherData) {
    if(!IsInitKey())
    return “”;
    return SimpSM2Util.decrypt(instance.privateKey, cipherData);
    }

}

2、前端代码示例

安装sm-crypto包:   npm install --save sm-crypto

前端加解密更简单,  引包后就能用

let txt=‘简单加密不要验签’ //要加密的字段
const sm2 = require(‘sm-crypto’).sm2
const cipherMode = 1;// 1 - C1C3C2,0 - C1C2C3,默认为1
var publicKey = “04aa909915f87880507e3de515220cc8f82b1c5693f56a0475b3b48ff7448c229734cd724e603000dd78569faa9fbc1eeb93a6d836190a0ee734e2d9e74d804f28”;
// 加密结果
let encryptData = sm2.doEncrypt(txt, publicKey, cipherMode);
// 解密
sm2.doDecrypt(txt, privateKey, cipherMode);

适合简单的传输加密

3、避坑指南

在引用 bcprov-jdk18on 包的时候, 有可能存在版本冲突, 或本地安全问题,  这个是我在返回切换工程遇到的问题

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数网络安全工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上网络安全知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注网络安全获取)
img

给大家的福利

零基础入门

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

同时每个成长路线对应的板块都有配套的视频提供:

在这里插入图片描述

因篇幅有限,仅展示部分资料

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
img

,仅展示部分资料

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-0hmi5EeV-1712654908538)]

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐