当前位置: 首页 > 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();}
}

http://www.lryc.cn/news/242176.html

相关文章:

  • CSS-背景属性篇
  • KyLin离线安装OceanBase
  • 插件预热 | 且看安全小白如何轻松利用Goby插件快速上分
  • pytorch下载离线包的网址
  • 【docker下安装jenkins】(一)
  • 【前端】必学知识ES6 1小时学会
  • 【学生成绩管理】数据库示例数据(MySQL代码)
  • 【电子通识】什么是物料清单BOM(Bill of Material))
  • 接口自动化测试难点:数据库验证解决方案!
  • 淘宝、1688代购系统;微信代购小程序,代购系统源代码,PHP前端源码演示
  • LED驱动控制专用电路
  • 为什么 Flink 抛弃了 Scala
  • scala 实现表达式解析
  • 分布式事务seata的AT模式介绍
  • 初识Linux(1),看了这篇文章,妈妈再也不用担心我Linux找不到门了。
  • 甲烷产生及氧化
  • Javascript的form表单校验输入框
  • 大数据-之LibrA数据库系统告警处理(ALM-37003 GTM主备不同步或者GTM主备断连)
  • python每日一题——4移动0
  • CAN实验
  • (一)pytest自动化测试框架之生成测试报告(mac系统)
  • 微服务实战系列之Nginx
  • 使用rsync从OpenShift的pod复制文件
  • 解决Activiti5.22流程图部署在Windows上正常,但在linux上部署后出现中文变方块的问题
  • EMG肌肉电信号处理合集(三)
  • GitHub桌面版
  • 【广州华锐互动】昆虫3D虚拟动态展示:探索神奇的微观世界
  • 《QT从基础到进阶·三十六》QWidget实现收缩栏的效果
  • 运行软件报错找不到vcruntime140.dll无法继续执行代码怎么办-6个解决方法
  • 从Discord的做法中学习 — 使用Golang进行请求合并