SpringBoot實(shí)現(xiàn)國密SM4加密解密的使用示例
一、SM4介紹
SM4.0(原名SMS4.0)是中華人民共和國政府采用的一種分組密碼標(biāo)準(zhǔn),由國家密碼管理局于2012年3月21日發(fā)布。相關(guān)標(biāo)準(zhǔn)為“GM/T 0002-2012《SM4分組密碼算法》(原SMS4分組密碼算法)”。
在商用密碼體系中,SM4主要用于數(shù)據(jù)加密,其算法公開,分組長度與密鑰長度均為128bit,加密算法與密鑰擴(kuò)展算法都采用32輪非線性迭代結(jié)構(gòu),S盒為固定的8比特輸入8比特輸出。
SM4.0中的指令長度被提升到大于64K(即64×1024)的水平,這是SM 3.0規(guī)格(渲染指令長度允許大于512)的128倍。
二、引入Hutool工具類
POM文件引入下面兩個(gè)依賴
<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)國密算法SM4的全過程,更多相關(guān)SpringBoot 國密SM4加密解密內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- SpringBoot使用AES對(duì)JSON數(shù)據(jù)加密和解密的實(shí)現(xiàn)方法
- springboot使用國產(chǎn)加密算法方式,sm2和sm3加解密demo
- Springboot接口返回參數(shù)及入?yún)SA加密解密的過程詳解
- SpringBoot實(shí)現(xiàn)接口參數(shù)加密解密的示例代碼
- 關(guān)于Springboot數(shù)據(jù)庫配置文件明文密碼加密解密的問題
- springboot實(shí)現(xiàn)敏感字段加密存儲(chǔ)解密顯示功能
- springboot實(shí)現(xiàn)注冊(cè)加密與登錄解密功能(demo)
- SpringBoot接口加密解密統(tǒng)一處理
- 在SpringBoot中通過jasypt進(jìn)行加密解密的方法
- Springboot實(shí)現(xiàn)密碼的加密解密
相關(guān)文章
mybatis調(diào)用mysql存儲(chǔ)過程并獲取返回值方式
這篇文章主要介紹了mybatis調(diào)用mysql存儲(chǔ)過程并獲取返回值方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08Java使用bcrypt實(shí)現(xiàn)對(duì)密碼加密效果詳解
bcrypt是一種自帶鹽值(自動(dòng)加鹽)的加密方案。本文將通過示例為大家詳細(xì)介紹這一對(duì)密碼進(jìn)行加密的算法,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2022-03-03springboot 獲取訪問接口的請(qǐng)求的IP地址的實(shí)現(xiàn)
本文主要介紹了springboot獲取訪問接口的請(qǐng)求的IP地址的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-07-07MyBatis-Plus 查詢返回實(shí)體對(duì)象還是map
這篇文章主要介紹了MyBatis-Plus 查詢返回實(shí)體對(duì)象還是map,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09idea maven項(xiàng)目無法識(shí)別jar包里的class解決方案
這篇文章主要介紹了idea maven項(xiàng)目無法識(shí)別jar包里的class解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06SpringBoot如何獲取Get請(qǐng)求參數(shù)詳解
SpringBoot為我們封裝了許多簡便的獲取請(qǐng)求參數(shù)的方法,下面這篇文章主要給大家介紹了關(guān)于SpringBoot如何獲取Get請(qǐng)求參數(shù)的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-12-12詳解mybatis批量插入10萬條數(shù)據(jù)的優(yōu)化過程
這篇文章主要介紹了詳解mybatis批量插入10萬條數(shù)據(jù)的優(yōu)化過程,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04