最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot中SM2公鑰加密、私鑰解密的實(shí)現(xiàn)示例詳解

 更新時(shí)間:2025年07月03日 14:12:10   作者:DarLing丶張皇  
本文介紹了如何在SpringBoot項(xiàng)目中實(shí)現(xiàn)SM2公鑰加密和私鑰解密的功能,通過使用Hutool庫和BouncyCastle依賴,簡化了SM2加密的實(shí)現(xiàn)過程,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧

版權(quán)聲明:文為博主原創(chuàng)文章,未經(jīng)博主允許不得轉(zhuǎn)載。原創(chuàng)不易,希望大家尊重原創(chuàng)!
Copyright © 2025 DarLing丶張皇 保留所有權(quán)利

一、前言

Hutool提供了對國密算法的完整支持,我們可以利用它簡化SM2加密實(shí)現(xiàn)。

使用前準(zhǔn)備:在Maven中引入HutoolBouncyCastle依賴

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

1、加密信息(示例)

姓名:ikun
興趣愛好:唱、跳、RAP、籃球
練習(xí)時(shí)長:兩年半
代表作:《雞你太美》

2、加密結(jié)果(示例)

8cf9ea5813efb097d1f9c25191085db861e857e3056f6ef905f1f9a1667d00151c0d8cf026ca76c1812fc8937bcea9b5ec1d5546e3c4ce953a89e8305bc0a00526ce49108bd3bf750c12b203caf55548dce2129b748e87ad1991d2e26b88282b658e7ac3624ed86e6e23179a34511b81916e9c8745d0754d75d9b46c9f8ba6ee3f37e4915aadc9111fd805c5e7020fc98da713c87c2d9fa0d27c2554784e7cf189b64241e2aadb59751c2c2e1ccd7f3129e771893a9dc887c8942b409b0364b45a8ed9266ecf6d953e4cc1c522

二、實(shí)現(xiàn)代碼

公鑰與私鑰可通過瀏覽器搜索:SM2密鑰在線生成

在這里插入圖片描述

生成后添加至配置文件中

1、yml文件配置

統(tǒng)一在.yml文件中配置SM2公鑰SM2私鑰,方便維護(hù)。
1.1、開發(fā)環(huán)境下,在application-dev.yml中配置:

sm2:
public-key: “你的BASE64公鑰”
private-key: “你的BASE64私鑰”

1.2、生產(chǎn)環(huán)境下,在application-prod.yml中配置:

sm2:
public-key: “你的BASE64公鑰”
private-key: “你的BASE64私鑰”

2、創(chuàng)建SM2工具類

package org.jeecg.common.util;
import cn.hutool.crypto.SmUtil;
import cn.hutool.crypto.asymmetric.KeyType;
import cn.hutool.crypto.asymmetric.SM2;
import java.nio.charset.StandardCharsets;
/**
 * 基于Hutool的SM2加密工具類
 */
public class SM2HutoolUtil {
    /**
     * SM2加密
     * @param publicKey  公鑰(BASE64或HEX格式)
     * @param plaintext  明文
     * @return Base64編碼的密文
     */
    public static String encrypt(String publicKey, String plaintext) {
        SM2 sm2 = SmUtil.sm2(null, publicKey);
        return sm2.encryptBase64(plaintext, StandardCharsets.UTF_8, KeyType.PublicKey);
    }
    /**
     * SM2解密
     * @param privateKey 私鑰(BASE64或HEX格式)
     * @param ciphertext Base64編碼的密文
     * @return 解密后的明文
     */
    public static String decrypt(String privateKey, String ciphertext) {
        SM2 sm2 = SmUtil.sm2(privateKey, null);
        return sm2.decryptStr(ciphertext, KeyType.PrivateKey, StandardCharsets.UTF_8);
    }
    /**
     * 生成SM2密鑰對
     * @return 包含BASE64編碼公私鑰的數(shù)組,[0]為私鑰,[1]為公鑰
     */
    public static String[] generateKeyPair() {
        SM2 sm2 = SmUtil.sm2();
        return new String[]{
            sm2.getPrivateKeyBase64(),
            sm2.getPublicKeyBase64()
        };
    }
}

3、自動(dòng)注入

@Configuration
public class Sm2Config {
    @Value("${sm2.public-key}")
    private String publicKey;
    @Value("${sm2.private-key}")
    private String privateKey;
    @Bean
    public SM2 sm2() {
        return SmUtil.sm2(privateKey, publicKey);
    }
}

4、使用示例

/**SM2公鑰*/
@Value("${sm2.public-key}")
private String publicKey;
/**SM2私鑰*/
@Value("${sm2.private-key}")
private String privateKey;
public void demo() {
    Map<String, Object> map = new HashMap<String, Object>();
    map.put("姓名", "ikun");
    map.put("興趣愛好", "唱、跳、RAP、籃球");
    map.put("練習(xí)時(shí)長", "兩年半");
    map.put("代表作", "《雞你太美》");
    // 加密(公鑰)
    /**
     * SM2加密
     * @param publicKey 公鑰
     * @param map 明文內(nèi)容(實(shí)際開發(fā)替換為自己的內(nèi)容)
     * @return Base64編碼的密文
     */
    String encrypted = SM2HutoolUtil.encrypt(publicKey, map);
    /**
     * SM2解密
     * @param privateKey 私鑰
     * @param encrypted Base64編碼的密文內(nèi)容(實(shí)際開發(fā)替換為自己的內(nèi)容)
     * @return 解密后的明文
     */
    String encrypted = SM2HutoolUtil.decrypt(privateKey, encrypted);
}

三、說明

以上示例僅展示通過SM2對數(shù)據(jù)進(jìn)行公鑰加密,私鑰解密。
此示例中未使用簽名,如需使用簽名,可通過國密算法工具-SmUtil,結(jié)合需求再具體實(shí)現(xiàn)。
前往Hutool參考。

到此這篇關(guān)于SpringBoot中SM2公鑰加密、私鑰解密的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)SpringBoot SM2加密解密內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 如何在logback日志配置里獲取服務(wù)器ip和端口

    如何在logback日志配置里獲取服務(wù)器ip和端口

    這篇文章主要介紹了如何在logback日志配置里獲取服務(wù)器ip和端口的方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Java?集合框架底層數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)深度解析(示例詳解)

    Java?集合框架底層數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)深度解析(示例詳解)

    Java 集合框架(Java Collections Framework, JCF)是支撐高效數(shù)據(jù)處理的核心組件,其底層數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)直接影響性能與適用場景,這篇文章主要介紹Java集合框架底層數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)深度解析,需要的朋友可以參考下
    2025-06-06
  • Springboot 跨域配置無效及接口訪問報(bào)錯(cuò)的解決方法

    Springboot 跨域配置無效及接口訪問報(bào)錯(cuò)的解決方法

    這篇文章主要介紹了Springboot 跨域配置無效及接口訪問報(bào)錯(cuò)的解決方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • Java中并行執(zhí)行任務(wù)的多種方式

    Java中并行執(zhí)行任務(wù)的多種方式

    在Java編程中,經(jīng)常會(huì)遇到需要并行執(zhí)行任務(wù)的情況,特別是在處理大量數(shù)據(jù)或者需要異步處理的場景下,本文將介紹幾種常用的并行執(zhí)行任務(wù)的方式,文中有詳細(xì)的代碼示例供大家參考,需要的朋友可以參考下
    2024-04-04
  • 一招教你優(yōu)化Java代碼中大量的if/else

    一招教你優(yōu)化Java代碼中大量的if/else

    當(dāng)代碼已經(jīng)復(fù)雜到難以維護(hù)的程度之后,只能狠下心重構(gòu)優(yōu)化。那,有什么方案可以優(yōu)雅的優(yōu)化掉這些多余的if/else?本文就來和大家詳細(xì)聊聊
    2023-03-03
  • SpringBoot集成iText實(shí)現(xiàn)電子簽章功能

    SpringBoot集成iText實(shí)現(xiàn)電子簽章功能

    這篇文章主要為大家詳細(xì)介紹了SpringBoot如何集成iText實(shí)現(xiàn)電子簽章功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-10-10
  • 詳解Spring Cloud Gateway 數(shù)據(jù)庫存儲(chǔ)路由信息的擴(kuò)展方案

    詳解Spring Cloud Gateway 數(shù)據(jù)庫存儲(chǔ)路由信息的擴(kuò)展方案

    這篇文章主要介紹了詳解Spring Cloud Gateway 數(shù)據(jù)庫存儲(chǔ)路由信息的擴(kuò)展方案,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-11-11
  • Java三大結(jié)構(gòu)解析之順序、選擇、循環(huán)詳解

    Java三大結(jié)構(gòu)解析之順序、選擇、循環(huán)詳解

    Java中的for循環(huán)是一種迭代控制結(jié)構(gòu),通過初始化、條件判斷和迭代更新三個(gè)步驟,實(shí)現(xiàn)對代碼塊的重復(fù)執(zhí)行,這篇文章主要介紹了Java三大結(jié)構(gòu)解析之順序、選擇、循環(huán)的相關(guān)資料,需要的朋友可以參考下
    2025-11-11
  • Java8新特性之Lambda表達(dá)式淺析

    Java8新特性之Lambda表達(dá)式淺析

    這篇文章主要介紹了Java8新特性之Lambda表達(dá)式,本文著重講解了Lambda表達(dá)式的語法部份,需要的朋友可以參考下
    2014-06-06
  • 使用@Value注解從配置文件中讀取數(shù)組

    使用@Value注解從配置文件中讀取數(shù)組

    這篇文章主要介紹了使用@Value注解從配置文件中讀取數(shù)組的操作,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07

最新評論

进贤县| 永春县| 志丹县| 满洲里市| 涟源市| 龙南县| 伊宁市| 无锡市| 洱源县| 罗源县| 武宁县| 师宗县| 扬中市| 易门县| 陵川县| 祁东县| 宽城| 息烽县| 阜城县| 苍溪县| 宁蒗| 泸水县| 营口市| 渑池县| 陆丰市| 和政县| 彰化县| 铁岭县| 静安区| 上饶县| 颍上县| 陆川县| 广东省| 浦北县| 永福县| 合川市| 仙桃市| 姚安县| 南华县| 筠连县| 林州市|