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

Java通過(guò)MySQL的加解密函數(shù)實(shí)現(xiàn)敏感字段存儲(chǔ)

 更新時(shí)間:2022年03月01日 08:55:30   作者:灰太狼_cxh  
這篇文章主要介紹了如何在Java中MySQL的加解密函數(shù)實(shí)現(xiàn)敏感字段存儲(chǔ),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

java通過(guò)mysql的加解密函數(shù)實(shí)現(xiàn)敏感字段存儲(chǔ)

1.AES加解密工具類:

public class AESUtils {
 
    public static String encrypt(String password, String strKey) {
        try {
            SecretKey key = generateMySQLAESKey(strKey,"ASCII");
            Cipher cipher = Cipher.getInstance("AES");
            cipher.init(Cipher.ENCRYPT_MODE, key);
            byte[] cleartext = password.getBytes("UTF-8");
            byte[] ciphertextBytes = cipher.doFinal(cleartext);
            return new String(Hex.encodeHex(ciphertextBytes));
 
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (NoSuchPaddingException e) {
            e.printStackTrace();
        } catch (InvalidKeyException e) {
            e.printStackTrace();
        } catch (IllegalBlockSizeException e) {
            e.printStackTrace();
        } catch (BadPaddingException e) {
            e.printStackTrace();
        }
        return null;
    }
 
    public static String decrypt(String content, String aesKey){
        try {
            SecretKey key = generateMySQLAESKey(aesKey,"ASCII");
            Cipher cipher = Cipher.getInstance("AES");
            cipher.init(Cipher.DECRYPT_MODE, key);
            byte[] cleartext = Hex.decodeHex(content.toCharArray());
            byte[] ciphertextBytes = cipher.doFinal(cleartext);
            return new String(ciphertextBytes, "UTF-8");
 
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (NoSuchPaddingException e) {
            e.printStackTrace();
        } catch (InvalidKeyException e) {
            e.printStackTrace();
        } catch (IllegalBlockSizeException e) {
            e.printStackTrace();
        } catch (BadPaddingException e) {
            e.printStackTrace();
        } catch (DecoderException e) {
            e.printStackTrace();
        }
        return null;
    }
 
 
    public static SecretKeySpec generateMySQLAESKey(final String key, final String encoding) {
        try {
            final byte[] finalKey = new byte[16];
            int i = 0;
            for(byte b : key.getBytes(encoding))
                finalKey[i++%16] ^= b;
            return new SecretKeySpec(finalKey, "AES");
        } catch(UnsupportedEncodingException e) {
            throw new RuntimeException(e);
        }
    }
 
    public static String getAesKey(){
        StringBuilder sb = new StringBuilder();
        Random random = new Random();
        for(int i = 0; i < 16; i++){
            sb.append(random.nextInt(10));
        }
        return sb.toString();
    }
 
   public static void main(String[] args){
       String abc = "1";
       String aeskey = "3532263592381276";
       String a1= encrypt(abc, aeskey);
       System.out.println("加密后:" + a1);
       System.out.println("解密后:" +decrypt(a1, aeskey));
   }
 
   
}

運(yùn)行main方法結(jié)果:

加密后:62b778a8ccaa40cce4c9e4e42c693665
解密后:1

2.mysql的sql加解密:

生成16隨機(jī)鹽:3532263592381276

select  concat((SELECT CEILING(RAND()*9000000000000000+1000000000000000)),'');

加密:62B778A8CCAA40CCE4C9E4E42C693665

SELECT (HEX(AES_ENCRYPT(1,"3532263592381276")))

解密:1

SELECT AES_DECRYPT(UNHEX("62B778A8CCAA40CCE4C9E4E42C693665"),"3532263592381276")

3.實(shí)現(xiàn)效果:

java工具類加解密和mysql的加解密效果是一樣的。

知識(shí)點(diǎn)補(bǔ)充

mysql下的加密函數(shù)有如下幾個(gè)

PASSWORD():創(chuàng)建一個(gè)經(jīng)過(guò)加密的密碼字符串,適合于插入到MySQL的安全系

統(tǒng)。該加密過(guò)程不可逆,和unix密碼加密過(guò)程使用不同的算法。主要用于MySQL的認(rèn)證系統(tǒng)。

ENCRYPT(,):使用UNIX crypt()系統(tǒng)加密字符串,ENCRYPT()函數(shù)接收要加密的字符串和(可選的)用于加密過(guò)程的salt(一個(gè)可以唯一確定口令的字符串,就像鑰匙一樣),注意,windows上不支持

ENCODE(,)   DECODE(,):加密解密字符串。該函數(shù)有兩個(gè)參數(shù):被加密或解密的字符串和作為加密或解密基礎(chǔ)的密鑰。Encode結(jié)果是一個(gè)二進(jìn)制字符串,以BLOB類型存儲(chǔ)。加密成都相對(duì)比較弱

MD5():計(jì)算字符串的MD5校驗(yàn)和(128位)

SHA5():計(jì)算字符串的SHA5校驗(yàn)和(160位)

以上兩個(gè)函數(shù)返回的校驗(yàn)和是16進(jìn)制的,適合與認(rèn)證系統(tǒng)中使用的口令。

到此這篇關(guān)于Java通過(guò)MySQL的加解密函數(shù)實(shí)現(xiàn)敏感字段存儲(chǔ)的文章就介紹到這了,更多相關(guān)Java敏感字段存儲(chǔ)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java設(shè)計(jì)模式之java觀察者模式詳解

    Java設(shè)計(jì)模式之java觀察者模式詳解

    這篇文章主要介紹了Java經(jīng)典設(shè)計(jì)模式之觀察者模式,簡(jiǎn)單分析了觀察者模式的概念、原理并結(jié)合實(shí)例形式給出了java觀察者模式的具體用法與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2021-09-09
  • 超全面的SpringBoot面試題含答案

    超全面的SpringBoot面試題含答案

    這篇文章主要收錄了44道面試中經(jīng)常被問(wèn)的SpringBoot問(wèn)題,不管你是正在求職的新手還是已經(jīng)工作很久的高手,這篇關(guān)于SpringBoot的面試題總結(jié)一定會(huì)讓你有新的理解,讓我們一起來(lái)看看吧
    2023-03-03
  • SpringCloud?Feign超詳細(xì)講解

    SpringCloud?Feign超詳細(xì)講解

    Feign是Netflix公司開(kāi)發(fā)的一個(gè)聲明式的REST調(diào)用客戶端;?Ribbon負(fù)載均衡、?Hystrⅸ服務(wù)熔斷是我們Spring?Cloud中進(jìn)行微服務(wù)開(kāi)發(fā)非常基礎(chǔ)的組件,在使用的過(guò)程中我們也發(fā)現(xiàn)它們一般都是同時(shí)出現(xiàn)的,而且配置也都非常相似
    2022-10-10
  • mybatis如何通過(guò)接口查找對(duì)應(yīng)的mapper.xml及方法執(zhí)行詳解

    mybatis如何通過(guò)接口查找對(duì)應(yīng)的mapper.xml及方法執(zhí)行詳解

    這篇文章主要給大家介紹了利用mybatis如何通過(guò)接口查找對(duì)應(yīng)的mapper.xml及方法執(zhí)行的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編一起來(lái)學(xué)習(xí)學(xué)習(xí)吧。
    2017-06-06
  • Spring Security使用多種加密方式進(jìn)行密碼校驗(yàn)的代碼示例

    Spring Security使用多種加密方式進(jìn)行密碼校驗(yàn)的代碼示例

    在Web應(yīng)用中,密碼的安全存儲(chǔ)和驗(yàn)證是至關(guān)重要的,本文將通過(guò)一個(gè)具體的代碼示例,介紹和總結(jié)如何在Spring Security中使用多種加密方式進(jìn)行密碼校驗(yàn),文中通過(guò)代碼講解得非常詳細(xì),需要的朋友可以參考下
    2024-06-06
  • SpringBoot測(cè)試之@SpringBootTest與MockMvc的實(shí)戰(zhàn)應(yīng)用小結(jié)

    SpringBoot測(cè)試之@SpringBootTest與MockMvc的實(shí)戰(zhàn)應(yīng)用小結(jié)

    本文將深入探討SpringBoot測(cè)試中兩個(gè)核心工具:@SpringBootTest注解與MockMvc測(cè)試框架的實(shí)戰(zhàn)應(yīng)用,幫助開(kāi)發(fā)者構(gòu)建更穩(wěn)健的測(cè)試體系,提高代碼質(zhì)量與可維護(hù)性,感興趣的朋友一起看看吧
    2025-03-03
  • java之a(chǎn)ssert關(guān)鍵字用法案例詳解

    java之a(chǎn)ssert關(guān)鍵字用法案例詳解

    這篇文章主要介紹了java之a(chǎn)ssert關(guān)鍵字用法案例詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • Java?SpringBoot整合shiro-spring-boot-starterqi項(xiàng)目報(bào)錯(cuò)解決

    Java?SpringBoot整合shiro-spring-boot-starterqi項(xiàng)目報(bào)錯(cuò)解決

    這篇文章主要介紹了Java?SpringBoot整合shiro-spring-boot-starterqi項(xiàng)目報(bào)錯(cuò)解決,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考一下
    2022-08-08
  • 實(shí)例講解Java中動(dòng)態(tài)代理和反射機(jī)制

    實(shí)例講解Java中動(dòng)態(tài)代理和反射機(jī)制

    在本篇文章里小編給各位分享了關(guān)于Java中動(dòng)態(tài)代理和反射機(jī)制的相關(guān)知識(shí)點(diǎn)內(nèi)容,有需要的朋友們學(xué)習(xí)下。
    2019-01-01
  • SpringMVC請(qǐng)求亂碼處理的2種方式

    SpringMVC請(qǐng)求亂碼處理的2種方式

    這篇文章主要介紹了SpringMVC請(qǐng)求亂碼處理的2種方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11

最新評(píng)論

隆化县| 左权县| 南昌县| 甘洛县| 辽源市| 乳山市| 博罗县| 高州市| 大新县| 翁源县| 定南县| 泰宁县| 永和县| 沧源| 湾仔区| 紫阳县| 读书| 扎囊县| 安乡县| 阜宁县| 枞阳县| 娱乐| 从江县| 大足县| 汨罗市| 双城市| 黄陵县| 明光市| 拉孜县| 葫芦岛市| 中西区| 梧州市| 原平市| 和平县| 万荣县| 化州市| 德令哈市| 平远县| 闻喜县| 光泽县| 清水县|