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

【开发问题】vue的前端和java的后台,用sm4,实现前台加密,后台解密

sm4加密

  • vue
    • 引入的包
    • 代码加密解密
  • java
    • maven
    • 代码
    • 运行结果

vue

引入的包

npm install sm-crypto

代码加密解密

加密:

key :代表着密钥,必须是16 字节的十六进制密钥
password :加密前的密码
sm4Password :代表sm4加密后的密文

const sm4 = require('sm-crypto').sm4
const key = '0123456789abcdeffedcba9876543210' // 16 字节的十六进制密钥
const sm4Password = sm4.encrypt(password, key) 

在这里插入图片描述
解密:

key :代表着密钥,必须是16 字节的十六进制密钥
sm4Password:解密前的密文
password:解密后的密码

const sm4 = require('sm-crypto').sm4
const key = '0123456789abcdeffedcba9876543210' // 16 字节的十六进制密钥
const password= sm4.decrypt(sm4Password , key) 

java

maven

<!--sm4--><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.22</version></dependency><dependency><groupId>org.bouncycastle</groupId><artifactId>bcprov-jdk15on</artifactId><version>1.70</version> <!-- 使用最新版本 --></dependency>

代码

加密和解密:


import cn.hutool.crypto.symmetric.SymmetricCrypto;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.bouncycastle.util.encoders.Hex;import java.security.Security;public class SM4DecryptionExample {static {Security.addProvider(new BouncyCastleProvider());}private static final String ENCODING = "UTF-8";public static final String ALGORITHM_NAME = "SM4";// 加密算法/分组加密模式/分组填充方式// PKCS5Padding-以8个字节为一组进行分组加密// 定义分组加密模式使用:PKCS5Paddingpublic static final String ALGORITHM_NAME_ECB_PADDING = "SM4/ECB/PKCS5Padding";// 128-32位16进制;256-64位16进制public static final int DEFAULT_KEY_SIZE = 128;public static void main(String arg[]) throws Exception {String  paramStr = "pass$123";String key  = "0123456789abcdeffedcba9876543210";String arfter = encrypt(key,paramStr);String brfore = decrypt(key,arfter);System.out.println("明文:---------------------"+paramStr);System.out.println("加密后密文:---------------------"+arfter);System.out.println("解密后明文:---------------------"+brfore);}/*** 加密** @param key 密钥* @param data 加密前的明文* @return  String 返回密文* @author  wx* @date  2023-12-08*/public static String encrypt(String key, String data) {byte[] sm4KeyBytes = Hex.decode(key);SymmetricCrypto sm4 = new SymmetricCrypto("SM4/ECB/PKCS5Padding", sm4KeyBytes);return sm4.encryptHex(data).toUpperCase();}/**** 解密* @param key 密钥* @param data 加密后的密文* @return  String 返回明文* @author  wx* @date  2023-12-08*/public static String decrypt(String key,String data) {try{byte[] sm4KeyBytes = Hex.decode(key);SymmetricCrypto sm4 = new SymmetricCrypto("SM4/ECB/PKCS5Padding", sm4KeyBytes);return sm4.decryptStr(data);}catch (Exception e){return data;}}
}

运行结果

在这里插入图片描述

相关文章:

  • 系统运维安全之病毒自检及防护
  • 记录 | 使用samba将ubuntu文件夹映射到windows实现共享文件夹
  • Windows下使用CMD修改本地IP
  • MyBatis 常见面试题
  • 如何搭建废品上门回收小程序
  • 字节开源的netPoll底层LinkBuffer设计与实现
  • golang之net/http模块学习
  • 【Vulnhub 靶场】【Hackable: III】【简单 - 中等】【20210602】
  • C盘瘦身,C盘清理
  • 关于照片时间轴修改的方法根据文件名修改拍摄日期、创建日期等信息根据时间戳文件名修改照片信息
  • linux 13-2day 日志轮转 日志目录 轮转参数
  • 计算机病毒判定专家系统原理与设计《文字提取人工修正》
  • Docker安装与使用
  • vue-loader是如何工作的?
  • 财务机器人(RPA)会影响会计人员从业吗?
  • “大数据应用场景”之隔壁老王(连载四)
  • co.js - 让异步代码同步化
  • js算法-归并排序(merge_sort)
  • ReactNative开发常用的三方模块
  • vue自定义指令实现v-tap插件
  • weex踩坑之旅第一弹 ~ 搭建具有入口文件的weex脚手架
  • 大整数乘法-表格法
  • 排序算法之--选择排序
  • 使用 5W1H 写出高可读的 Git Commit Message
  • 使用 Xcode 的 Target 区分开发和生产环境
  • 限制Java线程池运行线程以及等待线程数量的策略
  • 一个完整Java Web项目背后的密码
  • 用简单代码看卷积组块发展
  • 找一份好的前端工作,起点很重要
  • Mac 上flink的安装与启动
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • ​Distil-Whisper:比Whisper快6倍,体积小50%的语音识别模型
  • ​LeetCode解法汇总518. 零钱兑换 II
  • #mysql 8.0 踩坑日记
  • (6)STL算法之转换
  • (AngularJS)Angular 控制器之间通信初探
  • (超简单)构建高可用网络应用:使用Nginx进行负载均衡与健康检查
  • (附源码)springboot工单管理系统 毕业设计 964158
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • (附源码)ssm码农论坛 毕业设计 231126
  • (十七)Flask之大型项目目录结构示例【二扣蓝图】
  • (转)四层和七层负载均衡的区别
  • (转载)PyTorch代码规范最佳实践和样式指南
  • (转载)虚函数剖析
  • *1 计算机基础和操作系统基础及几大协议
  • .NET CORE 3.1 集成JWT鉴权和授权2
  • .NET Core MongoDB数据仓储和工作单元模式封装
  • .NET 使用 XPath 来读写 XML 文件
  • .NET 中创建支持集合初始化器的类型
  • .NET/ASP.NETMVC 深入剖析 Model元数据、HtmlHelper、自定义模板、模板的装饰者模式(二)...
  • .NET开发不可不知、不可不用的辅助类(三)(报表导出---终结版)
  • @Not - Empty-Null-Blank
  • @SpringBootApplication 包含的三个注解及其含义
  • [.net 面向对象程序设计进阶] (19) 异步(Asynchronous) 使用异步创建快速响应和可伸缩性的应用程序...
  • [100天算法】-不同路径 III(day 73)