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

VUE3+Springboot实现SM2完整步骤

一.VUE3代码实现

1.安装依赖

 npm install --save sm-crypto

2.导入sm2

 const sm2 = require('sm-crypto').sm2

3.定义公钥私钥

var privateKey = "私钥";//解密使用
var publicKey  = "公钥";//加密使用

4.设置加密模式

//cipherMode [加密模式 C1C3C2:1, C1C2C3:0]const cipherMode = 1;//默认是1

5.加密

 
页面代码直接@click绑定getphone即可单击实现data() {return {copyphone:'',phone:'123545687',}}
methods: {getphone(){const sm2 = require('sm-crypto').sm2;var publicKey  = "公钥";//加密使用var encrText = 需要加密的字段;//例如var enxrText = this.phone;const cipherMode = 1;let decryptData = sm2.doEncrypt(encrText, publicKey, cipherMode) // 加密结果return '04' + decryptData;//04可不要具体看后端要求}}

6.解密

 页面代码直接@click绑定getphone即可单击实现data() {return {copyphone:'',}}
methods: {getphone(){const sm2 = require('sm-crypto').sm2;//var privateKey = "私钥";var encrText = 需要解密的字段; //有04要截 var encrText = val.substring(2);val是后台传过来的加密字段,将‘04’截取掉const cipherMode = 1let decryptData = sm2.doDecrypt(encrText, privateKey, cipherMode) // 解密结果return decryptData ;this.copyphone = decryptData;//赋值方便处理console.log(this.copyphone);//直接打印出来看是否实现}}

二、springboot代码实现

1.导入maven依赖

        <dependency><groupId>org.bouncycastle</groupId><artifactId>bcprov-jdk15on</artifactId><version>1.70</version></dependency><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.9</version></dependency>

2.代码实现

package com.gstanzer.supervise.sm2;import cn.hutool.core.util.HexUtil;
import cn.hutool.crypto.BCUtil;
import cn.hutool.crypto.ECKeyUtil;
import cn.hutool.crypto.asymmetric.KeyType;
import cn.hutool.crypto.asymmetric.SM2;
import cn.hutool.crypto.SmUtil;
import org.bouncycastle.crypto.engines.SM2Engine;
import org.bouncycastle.crypto.params.ECPublicKeyParameters;
import org.bouncycastle.crypto.signers.PlainDSAEncoding;
import org.bouncycastle.jcajce.provider.asymmetric.ec.BCECPublicKey;import java.util.HashMap;
import java.util.Map;
import java.util.Set;public class SM2CryptUtils {//生成秘钥对public static Map<String,String> createSM2Key(){SM2 sm2=SmUtil.sm2();sm2.setMode(SM2Engine.Mode.C1C3C2);String privateKey=HexUtil.encodeHexStr(BCUtil.encodeECPrivateKey(sm2.getPrivateKey()));String publicKey = HexUtil.encodeHexStr(((BCECPublicKey) sm2.getPublicKey()).getQ().getEncoded(false));Map<String,String> keys=new HashMap<>();keys.put(privateKey,publicKey);return keys;}//加密public static String encrypt(String data, String publicKey){String publicKeyTmp = publicKey;if (publicKey.length() == 130) {//这里需要去掉开始第一个字节 第一个字节表示标记publicKeyTmp = publicKey.substring(2);}String xhex = publicKeyTmp.substring(0, 64);String yhex = publicKeyTmp.substring(64, 128);ECPublicKeyParameters ecPublicKeyParameters = BCUtil.toSm2Params(xhex, yhex);//创建sm2 对象SM2 sm2 = new SM2(null, ecPublicKeyParameters);sm2.usePlainEncoding();sm2.setMode(SM2Engine.Mode.C1C3C2);String hex = sm2.encryptHex(data,KeyType.PublicKey);return hex;}//解密public static String decrypt(String data, String privateKey){SM2 sm2 = new SM2(ECKeyUtil.toSm2PrivateParams(privateKey), null);sm2.setMode(SM2Engine.Mode.C1C3C2);sm2.setEncoding(new PlainDSAEncoding());String encryptStr = sm2.decryptStr(data, KeyType.PrivateKey);return encryptStr;}public static void test1() {Map<String, String> keymap = SM2CryptUtils.createSM2Key();Set<Map.Entry<String, String>> entries = keymap.entrySet();String publickey = "";String privatekey = "";for (Map.Entry<String, String> entry : entries) {publickey = entry.getValue();privatekey = entry.getKey();}System.out.println("SM2国密算法公钥:{}" + publickey);System.out.println("SM2国密算法私钥:{}" + privatekey);String data = SM2CryptUtils.encrypt("CQmgh301%",publickey);System.out.println("加密后数据:" + data);String result = SM2CryptUtils.decrypt(data,privatekey);System.out.println("解密后数据:" + result);}public static void test2() {String publickey = "04daac50ec8a61ef628f79d738a71e543dcb969a5efbb6bf8290b73be5a5a80e3d34f74fb987b237ccf8cb1930a842a21d240e22807fdc66726a0a4368bf7483c6";String privatekey = "339521b8cd63e0e3c83fd89f6141b085000f9e0bfad66473288d2e6851ae8b77";System.out.println("SM2国密算法公钥:{}" + publickey);System.out.println("SM2国密算法私钥:{}" + privatekey);
//        String data = SM2CryptUtils.encrypt("CQmgh301%",publickey);String data = "04da994c0c7b224832cfb578be69445201dda1338515b5d5dcc94e12ff414a2a9fcee9c788344a0393178a341043d19c19619df62a5fbf6b731d2d559faa7470ff38e65b8a0a2b091de65277fccd0a91777e4d20d33845abafb0653edb557c85c7a4dcc78f3b87f35b";System.out.println("加密后数据:" + data);String result = SM2CryptUtils.decrypt(data,privatekey);System.out.println("解密后数据:" + result);}public static void main(String[] args) {//test1();test2();}
}

相关文章:

VUE3+Springboot实现SM2完整步骤

一.VUE3代码实现 1.安装依赖 npm install --save sm-crypto 2.导入sm2 const sm2 require(sm-crypto).sm2 3.定义公钥私钥 var privateKey "私钥";//解密使用 var publicKey "公钥";//加密使用 4.设置加密模式 //cipherMode [加密模式 C1C3C2:1,…...

CSS-背景属性篇

属性名&#xff1a;background-color 功能&#xff1a;设置背景颜色 属性值&#xff1a;符合CSS中颜色规范的值 默认背景颜色是 transparent body{ background-color: blue; } 属性名&#xff1a;background-image 功能&#xff1a;设置背景图片 属性值&#xff1a;url(图片的…...

KyLin离线安装OceanBase

去OceanBase下载若干文件 1 首先安装ob-deploy-2.3.1-2.el7.x86_64.rpm rpm -ivh ob-deploy-2.3.1-2.el7.x86_64.rpm# 运行此命令的时候他会报错 RPM should not be used directly install RPM packages, use Alien instead! 这个需要用Alien去转换为deb的包&#xff0c;不…...

插件预热 | 且看安全小白如何轻松利用Goby插件快速上分

001 前言 各位师傅们好&#xff0c;首先强调一遍我可没做坏事&#xff0c;我只是想学技术&#xff0c;我有什么坏心思呢 回到正题&#xff0c;作为一个初学者&#xff0c;我想和大家分享一下我是如何利用 Goby 进行刷分的经历。大家都知道&#xff0c;刚开始学习的时候&…...

pytorch下载离线包的网址

下载地址&#xff1a;https://download.pytorch.org/whl/torch_stable.html 安装GPU版本需要安装&#xff1a;torch、torchvision、 注意版本需要对应上 格式&#xff1a;适用cuda版本&#xff0c;torch版本 或者 orchvision版本&#xff0c;cp38就是适用python 3.8版本 下…...

【docker下安装jenkins】(一)

目的&#xff1a;在Linux操作系统&#xff08;x86_64)下&#xff0c;使用docker部署jenkins&#xff0c;python使用压缩包安装 安装jenkins的步骤 &#xff11;、编排jenkins的docker-compose.yml文件 说明&#xff1a;这里遇到部署jenkins后&#xff0c;占用内存8G,所以重新…...

【前端】必学知识ES6 1小时学会

1.ES6概述 2.let和const的认识 3.let、const、var的区别 4.模板字符串 5.函数默认参数 6.箭头函数【重点】 ​编辑7.对象初始化简写以及案例分析 【重点】 8.对象解构 8.对象传播操作符 9.对象传播操作符案例分析 ​编辑 10.数组Map 11.数组Reduce 12.NodeJS小结 …...

【学生成绩管理】数据库示例数据(MySQL代码)

【学生成绩管理】数据库示例数据&#xff08;MySQL代码&#xff09; 目录 【学生成绩管理】数据库示例数据&#xff08;MySQL代码&#xff09;一、创建数据库二、创建dept&#xff08;学院&#xff09;表1、创建表结构2、添加示例数据3、查看表中数据 三、创建stu&#xff08;学…...

【电子通识】什么是物料清单BOM(Bill of Material))

BOM (Bill of Materials)是我们常说的物料清单。BOM是制造业管理的重点之一&#xff0c;用于记载产品组成所需要的全部物料&#xff08;Items&#xff09;。物料需求的计算是从最终产品开始&#xff0c;层层往下推算出部件&#xff0c;组件&#xff0c;零件和原材料的需求量。这…...

接口自动化测试难点:数据库验证解决方案!

接口自动化中的数据库验证&#xff1a;确保数据的一致性和准确性 接口自动化测试是现代软件开发中不可或缺的一环&#xff0c;而数据库验证则是确保接口返回数据与数据库中的数据一致性的重要步骤。本文将介绍接口自动化中的数据库验证的原理、步骤以及示例代码&#xff0c;帮…...

淘宝、1688代购系统;微信代购小程序,代购系统源代码,PHP前端源码演示

电商价格数据监测接口、品牌商品控价接口、商品数据分析接口和比价搜索API接口都是非常实用的电商接口服务&#xff0c;下面我将为您详细介绍这些接口的用途和使用方式。 1.电商价格数据监测接口&#xff08;注册获取请求调用key&#xff09; taobao.item_get-获得淘宝商品详…...

LED驱动控制专用电路

一、基本概述 TM1628是一种带键盘扫描接口的LED&#xff08;发光二极管显示器&#xff09;驱动控制专用IC,内部集成有MCU 数 字接口、数据锁存器、LED 驱动、键盘扫描等电路。本产品质量可靠、稳定性好、抗干扰能力强。 主要适用于家电设备(智能热水器、微波炉、洗衣机、空调…...

为什么 Flink 抛弃了 Scala

曾经红遍一时的Scala 想当初Spark横空出世之后&#xff0c;Scala简直就是语言界的一颗璀璨新星&#xff0c;惹得大家纷纷侧目&#xff0c;连Kafka这类技术框架也选择用Scala语言进行开发重构。 可如今&#xff0c;Flink竟然公开宣布弃用Scala 在Flink1.18的官方文档里&#x…...

scala 实现表达式解析

表达式解析 import org.junit.Testimport scala.collection.mutableclass ExprTestCase {private val orderSource "source_1"private val saleChannel "saleChannel"val datas new mutable.HashMap[String, String]();// p1, source1, sale1, source…...

分布式事务seata的AT模式介绍

分布式事务seata的AT模式介绍 seata是阿里开源的一款分布式事务解决方案&#xff0c;致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式&#xff0c;本文主要介绍AT模式的使用。 seata安装 下载seata服务&#xff0c;官方地址…...

初识Linux(1),看了这篇文章,妈妈再也不用担心我Linux找不到门了。

文章目录 前言1. ls 指令例如&#xff1a;只显示文件名属性ls显示文件详细属性 ls - l 该操作可以简写成ll查看隐藏文件ls -l -a 2.pwd例如&#xff1a;显示当前目录所处的路径类似于windows如下操作: 3.cd 指令例如&#xff1a;改变工作目录相当于windows如下操作 4.whoami 指…...

甲烷产生及氧化

温室气体排放被认为是加速气候变化的重要因素&#xff0c;甲烷(CH4)是仅次于二氧化碳(CO2)的重要温室气体&#xff0c;其百年温室效应潜势是CO2的28倍[1-2]。湿地中的CH4由产甲烷古菌在水体底部或沉积层严格厌氧环境下产生并释放进入水体&#xff0c;产生的CH4向上覆水运输过程…...

Javascript的form表单校验输入框

以下是HTML代码&#xff1a; <form name"myForm" onsubmit"return validateForm()"><label for"name">姓名&#xff1a;</label><input type"text" id"name" name"name"><br><l…...

大数据-之LibrA数据库系统告警处理(ALM-37003 GTM主备不同步或者GTM主备断连)

告警解释 当GTM主实例与GTM备实例连接异常或者GTM主实例未处于同步状态时&#xff0c;产生该告警。 告警属性 告警ID 告警级别 可自动清除 37003 严重 是 告警参数 参数名称 参数含义 ServiceName 产生告警的服务名称 RoleName 产生告警的角色名称 HostName 产…...

python每日一题——4移动0

题目 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0] 示例 2: 输入: nums [0]…...

Qt5/6项目实战:告别中文乱码,从编辑器设置到源码编码的完整避坑指南

Qt5/6中文编码实战&#xff1a;从源码到编译器的全链路避坑手册 第一次在Qt项目中看到满屏的"锟斤拷"时&#xff0c;我盯着屏幕愣了三分钟。这不是简单的技术问题&#xff0c;而是跨平台开发中字符编码的"百慕大三角"——编译器、IDE、操作系统和Qt版本在这…...

HTML转DOCX终极方案:企业级文档自动化转换完整指南

HTML转DOCX终极方案&#xff1a;企业级文档自动化转换完整指南 【免费下载链接】html-to-docx HTML to DOCX converter 项目地址: https://gitcode.com/gh_mirrors/ht/html-to-docx 在数字化办公时代&#xff0c;HTML内容与Word文档之间的格式转换已成为企业文档处理的核…...

Cursor AI破解工具终极指南:免费解锁Pro功能的完整解决方案

Cursor AI破解工具终极指南&#xff1a;免费解锁Pro功能的完整解决方案 【免费下载链接】cursor-free-vip [Support 0.45]&#xff08;Multi Language 多语言&#xff09;自动注册 Cursor Ai &#xff0c;自动重置机器ID &#xff0c; 免费升级使用Pro 功能: Youve reached you…...

Aurora 8b/10b上板调试避坑指南:从单板自环到双板光口互联的完整流程

Aurora 8b/10b硬件调试实战&#xff1a;从单板自环到双板光口互联的全流程解析 在FPGA高速串行通信领域&#xff0c;Aurora 8b/10b协议因其简洁高效的特性&#xff0c;成为板间互联的常用方案。但将仿真环境中的设计部署到实际硬件时&#xff0c;工程师往往会遇到各种意料之外的…...

荧光法叶绿素在线传感器

荧光法叶绿素在线传感器核心参数明确&#xff0c;适配多场景监测需求&#xff0c;关键参数如下&#xff0c;确保检测精准性与场景适配性&#xff1a;测量原理&#xff1a;荧光法&#xff0c;依托叶绿素的荧光特性和吸光特性实现精准检测&#xff0c;灵敏度高&#xff0c;可捕捉…...

软件工程中设计模式的最佳实践与应用场景深度分析

软件工程中设计模式的最佳实践与应用场景深度分析 在软件开发过程中&#xff0c;设计模式是解决常见问题的经典方案&#xff0c;它们不仅能提高代码的可维护性和复用性&#xff0c;还能帮助开发团队更高效地协作。随着软件系统复杂度的提升&#xff0c;合理运用设计模式成为工…...

nli-MiniLM2-L6-H768应用场景:智能合约条款与自然语言解释的矛盾性检测

nli-MiniLM2-L6-H768应用场景&#xff1a;智能合约条款与自然语言解释的矛盾性检测 1. 模型核心能力解析 nli-MiniLM2-L6-H768是一个专为文本关系判断设计的轻量级自然语言推理(NLI)模型。与生成式模型不同&#xff0c;它的核心价值在于精准判断两段文本之间的逻辑关系&#…...

nRF24L01模块性能调优笔记:基于STC8H的SPI通信,如何突破700包/秒的传输瓶颈?

nRF24L01模块性能调优实战&#xff1a;从SPI优化到硬件设计的全方位突破 在嵌入式无线通信领域&#xff0c;nRF24L01凭借其优异的性价比和稳定的2.4GHz传输性能&#xff0c;成为众多开发者的首选。但当我们需要将其性能推向极限时&#xff0c;单纯的驱动实现远远不够。本文将分…...

Elsevier Tracker:终极免费的学术投稿进度监控解决方案

Elsevier Tracker&#xff1a;终极免费的学术投稿进度监控解决方案 【免费下载链接】Elsevier-Tracker 项目地址: https://gitcode.com/gh_mirrors/el/Elsevier-Tracker 还在为Elsevier投稿系统的繁琐状态查询而烦恼吗&#xff1f;Elsevier Tracker是一款专为科研工作者…...

单元测试之道:JUnit-Mockito 使用指南

在当今快节奏的软件开发中&#xff0c;单元测试已成为保障代码质量的重要手段。《单元测试之道&#xff1a;JUnit/Mockito 使用指南》是一本专注于Java单元测试的实用指南&#xff0c;通过JUnit和Mockito两大框架的深度解析&#xff0c;帮助开发者掌握高效测试的核心技巧。无论…...