欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java實(shí)現(xiàn)SM3加密和驗(yàn)證的示例代碼

 更新時(shí)間:2023年12月19日 11:26:36   作者:共飲一杯無  
在商用密碼體系中,SM3主要用于數(shù)字簽名及驗(yàn)證、消息認(rèn)證碼生成及驗(yàn)證、隨機(jī)數(shù)生成等,其算法公開,本文給大家詳細(xì)介紹了使用Java實(shí)現(xiàn)SM3加密和驗(yàn)證,文中有詳細(xì)的代碼示例供大家參考,需要的朋友可以參考下

需要引入如下坐標(biāo)依賴:

<dependency>
    <groupId>org.bouncycastle</groupId>
    <artifactId>bcprov-jdk15on</artifactId>
    <version>1.68</version>
</dependency>

自定義密鑰加密及校驗(yàn)

加密

	private static final String ENCODING = "UTF-8";
    /**
     * 加密
     *
     * @param src 明文
     * @param key 密鑰
     * @return
     * @throws Exception
     */
    public static String encrypt(String src, String key) throws Exception {
        return ByteUtils.toHexString(getEncryptByKey(src, key));
    }


    /**
     * SM3加密方式之: 根據(jù)自定義密鑰進(jìn)行加密,返回加密后長(zhǎng)度為32位的16進(jìn)制字符串
     *
     * @param src 源數(shù)據(jù)
     * @param key 密鑰
     * @return
     * @throws Exception
     */
    public static byte[] getEncryptByKey(String src, String key) throws Exception {
        byte[] srcByte = src.getBytes(ENCODING);
        byte[] keyByte = key.getBytes(ENCODING);
        KeyParameter keyParameter = new KeyParameter(keyByte);
        SM3Digest sm3 = new SM3Digest();
        HMac hMac = new HMac(sm3);
        hMac.init(keyParameter);
        hMac.update(srcByte, 0, srcByte.length);
        byte[] result = new byte[hMac.getMacSize()];
        hMac.doFinal(result, 0);
        return result;
    }

校驗(yàn)

    /**
     * 利用源數(shù)據(jù)+密鑰校驗(yàn)與密文是否一致
     *
     * @param src       源數(shù)據(jù)
     * @param key       密鑰
     * @param sm3HexStr 密文
     * @return
     * @throws Exception
     */
    public static boolean verify(String src, String key, String sm3HexStr) throws Exception {
        byte[] sm3HashCode = ByteUtils.fromHexString(sm3HexStr);
        byte[] newHashCode = getEncryptByKey(src, key);
        return Arrays.equals(newHashCode, sm3HashCode);
    }

無密鑰的加密及校驗(yàn)

加密

    /**
     * SM3加密方式之:不提供密鑰的方式 SM3加密,返回加密后長(zhǎng)度為64位的16進(jìn)制字符串
     *
     * @param src 明文
     * @return
     */
    public static String encrypt(String src) {
        return ByteUtils.toHexString(getEncryptBySrcByte(src.getBytes()));
    }

    /**
     * 返回長(zhǎng)度為32位的加密后的byte數(shù)組
     *
     * @param srcByte
     * @return
     */
    public static byte[] getEncryptBySrcByte(byte[] srcByte) {
        SM3Digest sm3 = new SM3Digest();
        sm3.update(srcByte, 0, srcByte.length);
        byte[] encryptByte = new byte[sm3.getDigestSize()];
        sm3.doFinal(encryptByte, 0);
        return encryptByte;
    }

校驗(yàn)

    /**
     * 校驗(yàn)源數(shù)據(jù)與加密數(shù)據(jù)是否一致
     *
     * @param src       源數(shù)據(jù)
     * @param sm3HexStr 16進(jìn)制的加密數(shù)據(jù)
     * @return
     * @throws Exception
     */
    public static boolean verify(String src, String sm3HexStr) throws Exception {
        byte[] sm3HashCode = ByteUtils.fromHexString(sm3HexStr);
        byte[] newHashCode = getEncryptBySrcByte(src.getBytes(ENCODING));
        return Arrays.equals(newHashCode, sm3HashCode);
    }

測(cè)試驗(yàn)證

public static void main(String[] args) throws Exception {
        String srcStr = "今天天氣很晴朗";
        String key = "zjqzjq";
        // ******************************自定義密鑰加密及校驗(yàn)*****************************************
        String hexStrByKey = SM3Utils.encrypt(srcStr, key);
        System.out.println("帶密鑰加密后的密文:" + hexStrByKey);

        System.out.println("明文(帶密鑰)與密文校驗(yàn)結(jié)果:" + SM3Utils.verify(srcStr, key, hexStrByKey));

        // ******************************無密鑰的加密及校驗(yàn)******************************************
        String hexStrNoKey = SM3Utils.encrypt(srcStr);
        System.out.println("不帶密鑰加密后的密文:" + hexStrNoKey);

        System.out.println("明文(不帶密鑰)與密文校驗(yàn)結(jié)果:" + SM3Utils.verify(srcStr, hexStrNoKey));

    }

結(jié)果輸出如下:

以上就是Java實(shí)現(xiàn)SM3加密和驗(yàn)證的示例代碼的詳細(xì)內(nèi)容,更多關(guān)于Java實(shí)現(xiàn)SM3加密和驗(yàn)證的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • SpringBoot項(xiàng)目嵌入RocketMQ的實(shí)現(xiàn)示例

    SpringBoot項(xiàng)目嵌入RocketMQ的實(shí)現(xiàn)示例

    本文主要介紹了SpringBoot項(xiàng)目嵌入RocketMQ的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-05-05
  • java將String字符串轉(zhuǎn)換為L(zhǎng)ist<Long>類型實(shí)例方法

    java將String字符串轉(zhuǎn)換為L(zhǎng)ist<Long>類型實(shí)例方法

    在本篇文章里小編給大家整理的是關(guān)于java將String字符串轉(zhuǎn)換為L(zhǎng)ist<Long>類型實(shí)例方法,需要的朋友們可以參考下。
    2020-03-03
  • 分析SpringBoot的啟動(dòng)原理

    分析SpringBoot的啟動(dòng)原理

    這篇文章主要分析了SpringBoot的啟動(dòng)原理,幫助大家更好的理解和使用spring boot框架,感興趣的朋友可以了解下
    2020-09-09
  • Java使用Jdbc連接Oracle執(zhí)行簡(jiǎn)單查詢操作示例

    Java使用Jdbc連接Oracle執(zhí)行簡(jiǎn)單查詢操作示例

    這篇文章主要介紹了Java使用Jdbc連接Oracle執(zhí)行簡(jiǎn)單查詢操作,結(jié)合實(shí)例形式詳細(xì)分析了java基于jdbc實(shí)現(xiàn)Oracle數(shù)據(jù)庫的連接與查詢相關(guān)操作技巧,需要的朋友可以參考下
    2019-09-09
  • Spring使用AspectJ注解和XML配置實(shí)現(xiàn)AOP

    Spring使用AspectJ注解和XML配置實(shí)現(xiàn)AOP

    這篇文章主要介紹了Spring使用AspectJ注解和XML配置實(shí)現(xiàn)AOP的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • 解決Maven無法下載2.1.7.js7版本的itext依賴問題

    解決Maven無法下載2.1.7.js7版本的itext依賴問題

    本文主要解決使用Maven編譯項(xiàng)目時(shí)出現(xiàn)的itext依賴版本問題,通過分析,發(fā)現(xiàn)該問題是由jasperreports依賴的特定版本itext導(dǎo)致的,解決方法是排除jasperreports中的itext依賴,并自行指定更高版本的itext依賴
    2024-12-12
  • SpringBoot訪問windows共享文件的方法

    SpringBoot訪問windows共享文件的方法

    這篇文章主要介紹了SpringBoot訪問windows共享文件,項(xiàng)目使用minio存儲(chǔ)且不在同一臺(tái)服務(wù)器上,為了優(yōu)化速度決定使用windows共享功能進(jìn)行文件傳輸,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-02-02
  • springboot頁面國(guó)際化配置指南

    springboot頁面國(guó)際化配置指南

    聽起來高大上的國(guó)際化,起始就是在利用瀏覽器語言,或者頁面中的中英文切換,將頁面的文字在其他語言和中文進(jìn)行切換,這篇文章主要給大家介紹了關(guān)于springboot頁面國(guó)際化配置的相關(guān)資料,需要的朋友可以參考下
    2022-03-03
  • JAVA Web.xml加載順序過程詳解

    JAVA Web.xml加載順序過程詳解

    這篇文章主要介紹了JAVA Web.xml加載順序過程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-12-12
  • Java SPEL表達(dá)式注入漏洞原理解析

    Java SPEL表達(dá)式注入漏洞原理解析

    SpEL簡(jiǎn)稱Spring表達(dá)式語言,在Spring 3中引入,SpEL能在運(yùn)行時(shí)構(gòu)建復(fù)雜表達(dá)式、存取對(duì)象圖屬性、對(duì)象方法調(diào)用等等,可以與基于XML和基于注解的Spring配置還有bean定義一起使用,本文給大家介紹Java SPEL表達(dá)式注入漏洞原理研究,感興趣的朋友一起看看吧
    2023-10-10

最新評(píng)論