当前位置: 首页 > news >正文

前后端实现国密2加密

前后端实现sm2加密

  • 后端相关代码
  • 前端相关代码

后端相关代码

  1. 引入依赖
<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.32</version>
</dependency>
<dependency><groupId>org.bouncycastle</groupId><artifactId>bcprov-jdk15on</artifactId><version>1.70</version>
</dependency>
  1. 生成密钥
import cn.hutool.core.util.HexUtil;
import cn.hutool.crypto.SmUtil;
import cn.hutool.crypto.asymmetric.SM2;
import org.bouncycastle.jcajce.provider.asymmetric.ec.BCECPublicKey;SM2 sm2 = SmUtil.sm2();
// 获取私钥
String privateKey = sm2.getPrivateKeyBase64();
// 获取公钥
String publicKey = sm2.getPublicKeyBase64();System.out.println("私钥: " + privateKey);
System.out.println("公钥: " + publicKey);// 给前端用的公钥
String publicKeyHex = HexUtil.encodeHexStr(((BCECPublicKey)sm2.getPublicKey()).getQ().getEncoded(false));
System.out.println("公钥Q: " + publicKeyHex);
  1. 加密方法
import cn.hutool.crypto.SmUtil;
import cn.hutool.crypto.asymmetric.KeyType;
import cn.hutool.crypto.asymmetric.SM2;
import com.alibaba.fastjson.JSONObject;public static String encrypt() {JSONObject json = new JSONObject();json.put("id","123456");json.put("username","text");json.put("timestamp",System.currentTimeMillis());// 时间戳//加密 仅加密可不传私钥, publicKey为上一步获取的公钥SM2 sm21 = SmUtil.sm2(null, publicKey);String tyParam = sm21.encryptHex(json.toString(), KeyType.PublicKey);System.out.println("加密前内容 json:\t"+json.toString());System.out.println("加密后内容 tyParam:\t"+tyParam);return tyParam;}
  1. 解密方法
import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.SmUtil;
import cn.hutool.crypto.asymmetric.KeyType;
import cn.hutool.crypto.asymmetric.SM2;public static String decrypt(String text) {SM2 sm2 = SmUtil.sm2(PRIVATE_KEY_BASE64, null);return StrUtil.utf8Str(sm2.decryptFromBcd(text, KeyType.PrivateKey));}

前端相关代码

  1. 引入依赖
pnpm i sm-crypto
  1. 加密
const pubKey = '04..' // 后端生成的publicKeyHex,必须是04开头const encryptData = (data) => {const encryptedData = sm2.doEncrypt(data, pubKey, 1)// 传给后端密文需要添加04前缀return04+ encryptedData
}const data = {id: '123456',username: 'text',timestamp: Date.now()}
const encryptedData = encryptData(JSON.stringify(data))
console.log('加密后的数据(传给后端):', encryptedData)
http://www.dtcms.com/a/546041.html

相关文章:

  • 企业免费建站选哪个?客观解析实用方案​
  • 卖网站怎样做百度怎么创建自己的网站
  • 网站建设方案范文8篇网络技术论坛
  • Linux驱动开发笔记(十六)——INPUT
  • 做片头网站万网空间最多放几个网站
  • AI推理计算需求飞升,在传统路径外,聚焦异构计算发展
  • KEIL(MDK-ARM)的快捷键汇总
  • 深兰科技入选“2025中国人工智能行业创新力企业百强”
  • 广东省省建设厅网站企业网站建设的一般要素包括什么
  • 运城网站制作公司wordpress 调用所有分类
  • 计算机网络-体系结构与基础
  • 生成式人工智能赋能创造性思维培养:基于学科实践的教学模式构建研究
  • 网站推广公司黄页做网站要学的技术
  • 怎样解析网站域名网站管理主要包括哪些内容
  • 【Vue2】基础知识汇总与实战指南
  • Nerve:分布式基础设施智能管理平台的设计与实现
  • GD32F407VE天空星开发板的MQ135的空气质量检测
  • 域名备案以后怎么建设网站四站合一网站制作
  • 怎样做旅游城市住宿网站蜡笔小新网页制作模板
  • SCI精读: 利用YOLO深度学习模型增强植物病害识别能力
  • 天津做网站报价《设计》在线观看
  • 7.1.2.2 大数据方法论与实践指南-数仓中指标和 报表中指标的区别与联系
  • 引力与惯性力等效性的物理机制:张祥前统一场论的空间动力学解释
  • 网站界面设计简单百度域名注册官网
  • 佛山网站快照优化公司中国焊接外包加工网
  • VMamba: Visual State Space Model学习笔记
  • 设计排版优秀网站邯郸市口碑网络技术有限公司
  • Win11配置VMware-workstation以及Ubuntu环境
  • 网站建设开题报告wordpress is电影主题
  • 网络营销怎么做网站邢台泰尚网络科技有限公司