SpringBoot实现国密SM4加密解密的使用示例

 更新时间:2023年10月25日 11:05:17   作者:每天吃八顿  
在商用密码体系中,SM4主要用于数据加密,本文就来介绍一下SpringBoot实现国密SM4加密解密的使用示例,具有一定的参考价值,感兴趣的可以了解一下

一、SM4介绍

SM4.0(原名SMS4.0)是中华人民共和国政府采用的一种分组密码标准,由国家密码管理局于2012年3月21日发布。相关标准为“GM/T 0002-2012《SM4分组密码算法》(原SMS4分组密码算法)”。

在商用密码体系中,SM4主要用于数据加密,其算法公开,分组长度与密钥长度均为128bit,加密算法与密钥扩展算法都采用32轮非线性迭代结构,S盒为固定的8比特输入8比特输出。
SM4.0中的指令长度被提升到大于64K(即64×1024)的水平,这是SM 3.0规格(渲染指令长度允许大于512)的128倍。

二、引入Hutool工具类

POM文件引入下面两个依赖

<dependency>
  <groupId>org.bouncycastle</groupId>
  <artifactId>bcprov-jdk15to18</artifactId>
  <version>1.69</version>
</dependency>
<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.8.5</version>
</dependency>

三、新建SM4Util

package org.demo.utils;

import cn.hutool.crypto.symmetric.SymmetricCrypto; 
import cn.hutool.core.util.StrUtil;

public class SM4Utils {

	//key必须是16字节,即128位
	final static String key = "testsm4key123456";

	//指明加密算法和秘钥
	static SymmetricCrypto sm4 = new SymmetricCrypto("SM4/ECB/PKCS5Padding", key.getBytes());

	/**
	 * 加密为16进制,也可以加密成base64/字节数组
	 *
	 * @param plaintext
	 * @return
	 */
	public static String encryptSm4(String plaintext) {
		if (StrUtil.isBlank(plaintext)) {
			return "";
		}
		return sm4.encryptHex(plaintext);
	}

	/**
	 * 解密
	 *
	 * @param ciphertext
	 * @return
	 */
	public static String decryptSm4(String ciphertext) {
		if (StrUtil.isBlank(ciphertext)) {
			return "";
		}
		return sm4.decryptStr(ciphertext);
	}
}

四、使用

    public static void main(String[] args) {
        String str =  SM4Utils.encryptSm4("测试加密");
        System.out.println("加密后的字符串为"+str);
        System.out.println("解密后的字符串为"+SM4Utils.decryptSm4(str));
    }

以上内容就是使用Hutools实现国密算法SM4的全过程,更多相关SpringBoot 国密SM4加密解密内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Spring Boot配置AOP打印日志的全过程

    Spring Boot配置AOP打印日志的全过程

    这篇文章主要给大家介绍了关于Spring Boot配置AOP打印日志的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Spring Boot具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-08-08
  • SpringBoot2.6.x升级后循环依赖及Swagger无法使用问题

    SpringBoot2.6.x升级后循环依赖及Swagger无法使用问题

    这篇文章主要为大家介绍了SpringBoot2.6.x升级后循环依赖及Swagger无法使用问题,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • JavaGUI常用窗体组件与面板使用详解

    JavaGUI常用窗体组件与面板使用详解

    GUI即图形用户界面,它是基于图形的界面,windows就是一个图形用户界面的操作系统,而DOS是基于命令提示符的操作系统,GUI编程就是编出一个图形用户界面的软件,它使用图形的方式,以菜单、按钮、表示、图文框等标准界面元素组成的用户操作界面
    2023-03-03
  • 关于activemq安装配置以及启动错误的解决

    关于activemq安装配置以及启动错误的解决

    这篇文章主要介绍了关于activemq安装配置以及启动错误的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • Springboot-Management的项目实践

    Springboot-Management的项目实践

    本文主要介绍了Springboot-Management的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-05-05
  • Java扫描文件夹下所有文件名

    Java扫描文件夹下所有文件名

    这篇文章主要为大家详细介绍了Java扫描文件夹下所有文件名,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-02-02
  • Java concurrency线程池之线程池原理(四)_动力节点Java学院整理

    Java concurrency线程池之线程池原理(四)_动力节点Java学院整理

    这篇文章主要为大家详细介绍了Java concurrency线程池之线程池原理,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • java:提示程序包org.junit不存在时的解决方案

    java:提示程序包org.junit不存在时的解决方案

    这篇文章主要介绍了java:提示程序包org.junit不存在时的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • Json字符串与Object、List、Map的互转工具类

    Json字符串与Object、List、Map的互转工具类

    今天小编就为大家分享一篇关于Json字符串与Object、List、Map的互转工具类,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12
  • logback ThresholdFilter临界值日志过滤器源码解读

    logback ThresholdFilter临界值日志过滤器源码解读

    这篇文章主要为大家介绍了logback ThresholdFilter临界值日志过滤器源码解读,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11

最新评论