SpringBoot實(shí)現(xiàn)國(guó)密SM4加密解密的使用示例
一、SM4介紹
SM4.0(原名SMS4.0)是中華人民共和國(guó)政府采用的一種分組密碼標(biāo)準(zhǔn),由國(guó)家密碼管理局于2012年3月21日發(fā)布。相關(guān)標(biāo)準(zhǔn)為“GM/T 0002-2012《SM4分組密碼算法》(原SMS4分組密碼算法)”。
在商用密碼體系中,SM4主要用于數(shù)據(jù)加密,其算法公開(kāi),分組長(zhǎng)度與密鑰長(zhǎng)度均為128bit,加密算法與密鑰擴(kuò)展算法都采用32輪非線(xiàn)性迭代結(jié)構(gòu),S盒為固定的8比特輸入8比特輸出。
SM4.0中的指令長(zhǎng)度被提升到大于64K(即64×1024)的水平,這是SM 3.0規(guī)格(渲染指令長(zhǎng)度允許大于512)的128倍。
二、引入Hutool工具類(lèi)
POM文件引入下面兩個(gè)依賴(lài)
<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字節(jié),即128位
final static String key = "testsm4key123456";
//指明加密算法和秘鑰
static SymmetricCrypto sm4 = new SymmetricCrypto("SM4/ECB/PKCS5Padding", key.getBytes());
/**
* 加密為16進(jìn)制,也可以加密成base64/字節(jié)數(shù)組
*
* @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("測(cè)試加密");
System.out.println("加密后的字符串為"+str);
System.out.println("解密后的字符串為"+SM4Utils.decryptSm4(str));
}
以上內(nèi)容就是使用Hutools實(shí)現(xiàn)國(guó)密算法SM4的全過(guò)程,更多相關(guān)SpringBoot 國(guó)密SM4加密解密內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- SpringBoot使用AES對(duì)JSON數(shù)據(jù)加密和解密的實(shí)現(xiàn)方法
- springboot使用國(guó)產(chǎn)加密算法方式,sm2和sm3加解密demo
- Springboot接口返回參數(shù)及入?yún)SA加密解密的過(guò)程詳解
- SpringBoot實(shí)現(xiàn)接口參數(shù)加密解密的示例代碼
- 關(guān)于Springboot數(shù)據(jù)庫(kù)配置文件明文密碼加密解密的問(wèn)題
- springboot實(shí)現(xiàn)敏感字段加密存儲(chǔ)解密顯示功能
- springboot實(shí)現(xiàn)注冊(cè)加密與登錄解密功能(demo)
- SpringBoot接口加密解密統(tǒng)一處理
- 在SpringBoot中通過(guò)jasypt進(jìn)行加密解密的方法
- Springboot實(shí)現(xiàn)密碼的加密解密
相關(guān)文章
Java基礎(chǔ)之List內(nèi)元素的排序性能對(duì)比
這篇文章主要介紹了Java基礎(chǔ)之List內(nèi)元素的排序性能對(duì)比,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java基礎(chǔ)的小伙伴們有非常好的幫助,需要的朋友可以參考下2021-04-04
淺談SpringBoot 中關(guān)于自定義異常處理的套路
這篇文章主要介紹了淺談SpringBoot 中關(guān)于自定義異常處理的套路,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04
Mybatis中自定義TypeHandler處理枚舉的示例代碼
typeHandler,是 MyBatis 中的一個(gè)接口,用于處理數(shù)據(jù)庫(kù)中的特定數(shù)據(jù)類(lèi)型,下面簡(jiǎn)單介紹創(chuàng)建自定義 typeHandler 來(lái)處理枚舉類(lèi)型的示例,感興趣的朋友跟隨小編一起看看吧2024-01-01
springboot部署linux訪(fǎng)問(wèn)服務(wù)器資源的方法
這篇文章主要介紹了springboot部署linux訪(fǎng)問(wèn)服務(wù)器資源,部署springboot項(xiàng)目至服務(wù)器用了幾種不同方法,文中給大家詳細(xì)介紹,需要的朋友可以參考下2019-12-12

