国密SM2 非对称加解密前后端工具

1.依赖

        <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.21</version></dependency><dependency><groupId>org.bouncycastle</groupId><artifactId>bcpkix-jdk18on</artifactId><version>1.78.1</version></dependency>

2.java工具类


import cn.hutool.core.util.HexUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.BCUtil;
import cn.hutool.crypto.SmUtil;
import cn.hutool.crypto.asymmetric.KeyType;
import cn.hutool.crypto.asymmetric.SM2;
import cn.hutool.json.JSONObject;
import org.apache.commons.lang3.StringUtils;
import org.bouncycastle.crypto.engines.SM2Engine;
import org.bouncycastle.crypto.params.ECPrivateKeyParameters;
import org.bouncycastle.crypto.params.ECPublicKeyParameters;
import org.bouncycastle.jcajce.provider.asymmetric.ec.BCECPublicKey;public class Sm2Util {private static final String SM2_PUBLIC_KEY = "043bfa6294c822f76cdaf6ffaecc16a0fb49d4c8252a55944720a589c8276cc2d0d42b85e7659da7367dcaeab619e45d59793d72657eadc3e443f8f5bf9efea136";private static final String SM2_PRIVATE_KEY = "009f10794a9478e31715fe6f11fafb9a5954705a2e76ec018ad7fcac8ddd8caccc";/*** 获取SM2加密工具对象** @param privateKey 加密私钥* @param publicKey  加密公钥* @return 处理结果*/public static SM2 getSM2(String privateKey, String publicKey) {ECPrivateKeyParameters ecPrivateKeyParameters = null;ECPublicKeyParameters ecPublicKeyParameters = null;if (StringUtils.isNotBlank(privateKey)) {ecPrivateKeyParameters = BCUtil.toSm2Params(privateKey);}if (StringUtils.isNotBlank(publicKey)) {if (publicKey.length() == 130) {//这里需要去掉开始第一个字节 第一个字节表示标记publicKey = publicKey.substring(2);}String xhex = publicKey.substring(0, 64);String yhex = publicKey.substring(64, 128);ecPublicKeyParameters = BCUtil.toSm2Params(xhex, yhex);}//创建sm2 对象SM2 sm2 = new SM2(ecPrivateKeyParameters, ecPublicKeyParameters);sm2.usePlainEncoding();sm2.setMode(SM2Engine.Mode.C1C2C3);return sm2;}public static String encrypt(String data) {SM2 sm2 = getSM2(null, SM2_PUBLIC_KEY);return sm2.encryptBcd(data, KeyType.PublicKey);}public static String decrypt(String data) {SM2 sm2 = getSM2(SM2_PRIVATE_KEY, null);return StrUtil.utf8Str(sm2.decryptFromBcd(data, KeyType.PrivateKey));}public static JSONObject genSm2Keys() {SM2 sm2 = SmUtil.sm2();byte[] privateKeyByte = BCUtil.encodeECPrivateKey(sm2.getPrivateKey());//这里公钥不压缩  公钥的第一个字节用于表示是否压缩  可以不要byte[] publicKeyByte = ((BCECPublicKey) sm2.getPublicKey()).getQ().getEncoded(false);String privateKey = HexUtil.encodeHexStr(privateKeyByte);System.out.println("私钥:" + privateKey);String publicKey = HexUtil.encodeHexStr(publicKeyByte);System.out.println("公钥:" + publicKey);return new JSONObject().set("privateKey", privateKey).set("publicKey", publicKey);}
}

3  vue+ts工具类

// src/utils/crypto.ts
import * as sm from 'sm-crypto';const publicKey = '043bfa6294c822f76cdaf6ffaecc16a0fb49d4c8252a55944720a589c8276cc2d0d42b85e7659da7367dcaeab619e45d59793d72657eadc3e443f8f5bf9efea136';
const privateKey = '009f10794a9478e31715fe6f11fafb9a5954705a2e76ec018ad7fcac8ddd8caccc';export function encryptWithSM2(data: string): string {const encrypted = sm.sm2.doEncrypt(data, publicKey, 0);return '04'+encrypted;
}export function decryptWithSM2(dataHex: string): string {dataHex = dataHex.substring(2).toLocaleLowerCase()const decrypted = sm.sm2.doDecrypt(dataHex, privateKey, 0, { output: 'string' });return decrypted;
}

 参考链接:Vue + Springboot 前后端完整使用国密算法 SM2 数据加密 传输 交互 完整解决方案_国密sm2加密算法 前后端加密互通实现-CSDN客文章浏览阅读8k次,点赞5次,收藏48次。该博文介绍了如何在SpringBoot项目中实现国密SM2算法的加解密功能,包括依赖引入、加密解密方法创建、拦截器处理,以及前后端数据交互的加密流程。主要涉及SM2非对称加密和SM4对称加密,通过自定义拦截器对请求和响应数据进行加解密处理,确保数据传输的安全性。https://blog.csdn.net/yssa1125001/article/details/121208118

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/3904.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【银河麒麟操作系统】软raid重建速度限制问题分析

了解更多银河麒麟操作系统全新产品&#xff0c;请点击访问 麒麟软件产品专区&#xff1a;https://product.kylinos.cn 开发者专区&#xff1a;https://developer.kylinos.cn 文档中心&#xff1a;https://documentkylinos.cn 现象描述 遇到软raid重建速度问题&#xff0c;分…

ssm教室信息管理系统+vue

系统包含&#xff1a;源码论文 所用技术&#xff1a;SpringBootVueSSMMybatisMysql 免费提供给大家参考或者学习&#xff0c;获取源码看文章最下面 需要定制看文章最下面 目 录 目 录 III 1 绪论 1 1.1 研究背景 1 1.2目的和意义 1 1.3 论文结构安排 2 2 相关技术 3 …

去中心化存储:Web3中的数据安全新标准

随着Web3的兴起&#xff0c;去中心化存储逐渐成为数据安全的新标准。传统的中心化存储方式将数据集中保存在少数服务器上&#xff0c;这种模式尽管在早期互联网中被广泛应用&#xff0c;但随着数据量和数据价值的增加&#xff0c;其潜在的安全风险和隐私问题也逐渐暴露。而去中…

Ubuntu 22 安装 Apache Doris 3.0.3 笔记

Ubuntu 22 安装 Apache Doris 3.0.3 笔记 1. 环境准备 Doris 需要 Java 17 作为运行环境&#xff0c;所以首先需要安装 Java 17。 sudo apt-get install openjdk-17-jdk -y sudo update-alternatives --config java在安装 Java 17 后&#xff0c;可以通过 sudo update-alter…

安卓摄像头的详细使用

安卓摄像头的详细使用 一、引言二、权限设置三、打开摄像头四、摄像头的属性设置&#xff08;一&#xff09;预览尺寸&#xff08;二&#xff09;图片格式&#xff08;三&#xff09;对焦模式 五、摄像头预览六、拍照功能七、视频录制 一、引言 在安卓开发中&#xff0c;摄像头…

服务器的配置复杂,租用时该如何选择参数?

对于互联网企业来说&#xff0c;开发一套可以接入互联网的产品&#xff0c;并利用它来盈利是终极目的。但互联网产品必须有服务器才能运行&#xff0c;对于很多公司来说&#xff0c;托管服务器成本太高&#xff0c;而租用服务器才算得上是最好的选择&#xff0c;但面对配置参数…

10min本地安装Qwen1.5-0.5B-Chat

大模型系列文章 本地电脑离线部署大模型 配置&#xff1a;MAC-M1-8GB 10min本地安装Qwen1.5-0.5B-Chat 大模型系列文章前言一、下载Qwen1.5-0.5B-Chat二、构造函数chatBot.py三、启动命令1、放置脚本2、启动命令3、效果图 前言 在人工智能领域&#xff0c;大模型无疑是最炙手…

90%会展主办方都会用的6款数字化工具

在会展行业&#xff0c;数字化转型已成为提升竞争力的关键。面对日益增长的运营成本和收入增长的瓶颈&#xff0c;主办方需要借助数字化工具来实现效率提升和成本控制。 今天介绍几种常见的数字化工具和应用方式。 一、线上展览平台 构建线上展览平台是会展主办方拓展线上销…

弃用 RestTemplate,来了解一下官方推荐的 WebClient !

在 Spring Framework 5.0 及更高版本中&#xff0c;RestTemplate 已被弃用&#xff0c;取而代之的是较新的 WebClient。这意味着虽然 RestTemplate 仍然可用&#xff0c;但鼓励 Spring 开发人员迁移到新项目的 WebClient。 WebClient 优于 RestTemplate 的原因有几个&#xff…

SpringBoot+Thymeleaf电商系统

> 这是一个基于SpringBootThymeleafBootstrap实现的简单电商系统。 > 实现了用户浏览、添加购物车、商品管理等功能&#xff0c;并支持响应式布局。 > 本项目适合JAVA初学者作为入门学习项目 一、部分界面演示 二、技术栈 技术栈中文描述Spring Boot快速开发框架…

02-Dubbo特性及工作原理

02-Dubbo特性及工作原理 Dubbo 的特性 这里说一下 Dubbo 最主要的特性&#xff0c;从这些特性中&#xff0c;就可以看出来我们为什么要选用 Dubbo&#xff0c;也可以将 Dubbo 和 Spring Cloud 进行对比&#xff0c;比如我们搭建一套微服务系统&#xff0c;出于什么考虑选用 Dub…

20241102在荣品PRO-RK3566开发板的预置Android13下适配宸芯的数传模块CX6603N

20241102在荣品PRO-RK3566开发板的预置Android13下适配宸芯的数传模块CX6603N 2024/11/2 18:04 在WIN10使用程序&#xff1a;ViewLink-4.0.7_0708-windows-x64.exe 在荣品PRO-RK3566开发板的预置Android13下使用&#xff1a;ViewLink-2023_12_21-release-0.2.6.apk adb install…

Oracle OCP认证考试考点详解082系列12

题记&#xff1a; 本系列主要讲解Oracle OCP认证考试考点&#xff08;题目&#xff09;&#xff0c;适用于19C/21C,跟着学OCP考试必过。 56. 第56题&#xff1a; 题目 解析及答案&#xff1a; 关于企业管理器&#xff08;EM&#xff09;Express&#xff0c;以下哪两个陈述是…

AutoCAD2020

链接: https://pan.baidu.com/s/1Gvp3lQtMJxP0e_Fs5E_kIg提取码: jvuf 简介&#xff1a;一键安装&#xff0c;已经破解。支持W7-w10-w11系统64位

源鲁杯 2024 web(部分)

[Round 1] Disal F12查看: f1ag_is_here.php 又F12可以发现图片提到了robots 访问robots.txt 得到flag.php<?php show_source(__FILE__); include("flag_is_so_beautiful.php"); $a$_POST[a]; $keypreg_match(/[a-zA-Z]{6}/,$a); $b$_REQUEST[b];if($a>99999…

《高频电子线路》—— 调频方法

文章内容来源于【中国大学MOOC 华中科技大学通信&#xff08;高频&#xff09;电子线路精品公开课】&#xff0c;此篇文章仅作为笔记分享。 目录 调频方法 分类 调频技术指标 小结 直接调频方法与电路 直接调频方法 变容二极管直接调频电路 优缺点以及提升稳定性的方法…

使用onnxruntime-web 运行yolov8-nano推理

ONNX&#xff08;Open Neural Network Exchange&#xff09;模型具有以下两个特点促成了我们可以使用onnxruntime-web 直接在web端上运行推理模型&#xff0c;为了让这个推理更直观&#xff0c;我选择了试验下yolov8 识别预览图片&#xff1a; 1. 跨平台兼容性 ONNX 是一种开…

软件测试学习笔记丨测试平台的价值与体系

本文转自测试人社区&#xff0c;原文链接&#xff1a;https://ceshiren.com/t/topic/23405 测试平台的价值与体系 开发测试平台的前提&#xff1a; 已有的开源测试平台不能满足需要&#xff0c;不要轻易造轮子公司的测试体系健全当体系、测试技术等游刃有余&#xff0c;构建平台…

练习LabVIEW第四十题

学习目标&#xff1a; 用labvIEW做一个循环闪烁指示灯&#xff0c;要能够在前面板调节周期和占空比。 开始编写&#xff1a; 前面板 一个布尔指示灯一维数组&#xff0c;两个数值输入控件&#xff1b; 程序框图 添加一个while循环&#xff0c;循环内添加初始化数组&…

基于TRIZ理论的便携式光伏手机充电装置创新

随着智能手机功能的日益强大&#xff0c;电量消耗问题也日益凸显&#xff0c;尤其是在户外活动时&#xff0c;电量告急常常让人措手不及。面对这一挑战&#xff0c;基于TRIZ&#xff08;发明问题解决理论&#xff09;的创新思维&#xff0c;一款全新的便携式光伏手机充电装置应…