适用于前后端公用的SM2国密加密传输, JAVA + VUE_java sm2(1)
**throw new RuntimeException(“请InitKey初始化密钥!!!”);/**throw new RuntimeException(“请InitKey初始化密钥!!!”);
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年网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上网络安全知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注网络安全获取)
给大家的福利
零基础入门
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
同时每个成长路线对应的板块都有配套的视频提供:
因篇幅有限,仅展示部分资料
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
,仅展示部分资料
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-0hmi5EeV-1712654908538)]
更多推荐
所有评论(0)