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

java base64編碼和解碼用法解讀

 更新時間:2026年04月14日 10:43:06   作者:西涼的悲傷  
文章主要介紹了Base64編碼和解碼的基本概念,以及其不適用于直接放在URL中傳輸?shù)膯栴},然后詳細介紹了標準Base64編碼和解碼,以及無填充Base64編碼和解碼的使用方法,最后還介紹了MIME友好型Base64編碼和解碼的方法,并提醒在使用時需要注意的問題

前言

Base64 編碼會將字符串編碼得到一個含有 A-Za-z0-9+/ 的字符串。

base64 編碼和解碼網(wǎng)上有些地方稱為 base64 加密和解密,這是不準確的。base64 是不能用來加密和解密的,它只是一種編碼解碼方式,不能用于加密和解密,如果你想加密和解密可以選擇如 AES、RSA 等加密算法。

標準的 Base64 并不適合直接放在 URL 里傳輸,因為URL編碼器會把標準 Base64 中的“/”和“+”字符變?yōu)樾稳?“%XX” 的形式,而這些 “%” 號在存入數(shù)據(jù)庫時還需要再進行轉換,因為 ANSI SQL 中已將“%”號用作通配符。

一、base64編碼和解碼

1.標準的 base64 有填充的編碼與解碼

在 Base64 編碼中,輸出編碼字符串的長度必須是 3 的倍數(shù)。如果不是 3 的倍數(shù)編碼器會根據(jù)需要在編碼結尾添加一個或兩個填充字符 “=” 以滿足此要求。在解碼時,解碼器會丟棄結尾的那些額外的填充字符進行解碼。

開發(fā)中一般都使用此方法進行 base64 編碼與解碼,就像下面這樣:

        //Base64編碼
        String str = "hello!你好,小明!哈/哈哈,你去哪?sgdr56+=/*&yyy測試,base64測試加密解密hgdjuytiytiuyuytiuyirytr";
        String encodedString = Base64.getEncoder().encodeToString(str.getBytes());
        //輸出:aGVsbG8h5L2g5aW9LOWwj+aYju+8geWTiC/lk4jlk4jvvIzkvaDljrvlk6rvvJ9zZ2RyNTYrPS8qJnl5eea1i+ivle+8jGJhc2U2NOa1i+ivleWKoOWvhuino+WvhmhnZGp1eXRpeXRpdXl1eXRpdXlpcnl0cg==
        System.out.println(encodedString); 

        //Base64解碼
        byte[] decodedBytes = Base64.getDecoder().decode(encodedString);
        String decodedString = new String(decodedBytes);
         //輸出:hello!你好,小明!哈/哈哈,你去哪?sgdr56+=/*&yyy測試,base64測試加密解密hgdjuytiytiuyuytiuyirytr
        System.out.println(decodedString);

你會發(fā)現(xiàn)上面的標準的 base64 編碼后的字符串除了大小寫字母和數(shù)字還會有 +、/ 這兩個符號,這不太適合用于 url 傳輸或作為 url 中的參數(shù),就像前言中說的那樣,如果要用于 url,可以采用 getUrlEncoder 和 getUrlDecoder 的 base64 編碼:

        //Base64編碼
        String str = "hello!你好,小明!哈/哈哈,你去哪?sgdr56+=/*&yyy測試,base64測試加密解密hgdjuytiytiuyuytiuyirytr";
        String encodedString = Base64.getUrlEncoder().encodeToString(str.getBytes());
         //輸出:aGVsbG8h5L2g5aW9LOWwj-aYju-8geWTiC_lk4jlk4jvvIzkvaDljrvlk6rvvJ9zZ2RyNTYrPS8qJnl5eea1i-ivle-8jGJhc2U2NOa1i-ivleWKoOWvhuino-WvhmhnZGp1eXRpeXRpdXl1eXRpdXlpcnl0cg==
        System.out.println(encodedString);

        //Base64解碼
        byte[] decodedBytes = Base64.getUrlDecoder().decode(encodedString);
        String decodedString = new String(decodedBytes);
        //輸出:hello!你好,小明!哈/哈哈,你去哪?sgdr56+=/*&yyy測試,base64測試加密解密hgdjuytiytiuyuytiuyirytr
        System.out.println(decodedString); 

2.base64無填充的編碼與解碼

無填充的編碼編碼后的字符串結尾不會添加 “=” 字符。

		//Base64編碼
		String str = "hello!你好,小明!";
        String encodedString = Base64.getEncoder().withoutPadding().encodeToString(str.getBytes());
        System.out.println(encodedString); //aGVsbG8h5L2g5aW9LOWwj+aYju+8gQ

        //Base64解碼
        byte[] decodedBytes = Base64.getDecoder().decode(encodedString);
        String decodedString = new String(decodedBytes);
        System.out.println(decodedString); //hello!你好,小明!

注意:

除了上面介紹的 Base64 類進行 base64 編碼和解碼,jdk 的 BASE64Decoder 類也提供了 base64 編碼和解碼。

但是不推薦使用 BASE64Decoder 類進行編碼和解碼。

因為 BASE64Decoder 是對MIME友好的,編碼后的字符串如果超過76個字符就會換行,所以 BASE64Decoder 編碼后的字符串會后 \n\r 這樣的字符,在一些處理 \n\r 的代碼里可能會有問題。

如果你非要使用 BASE64Decoder 類進行編碼和解碼,請使用replaceAll(“\r|\n”, “”) 對編碼后的 \n和 \r 進行替換。

二、MIME友好型base64編碼和解碼

MIME 友好型 base64 編碼和解碼即編碼后如果長度每大于 76 就會加入 \r\n 這樣的換行控制符

		//Base64編碼
		String str = "727dced7-15c7-48c6-bb11-416ab51f98bc-2a19434a-3a64-496e-b07b-b51b0445384c-22525be7-82c7-4a72-8594-238712d4d59e";
        byte[] encodedAsBytes = str.getBytes();
        String encodedMime = Base64.getMimeEncoder().encodeToString(encodedAsBytes);
        System.out.println("編碼:"+encodedMime);

        //Base64解碼
        byte[] decodedBytes = Base64.getMimeDecoder().decode(encodedMime);
        String decodedMime = new String(decodedBytes);
        System.out.println("解碼:"+decodedMime); //727dced7-15c7-48c6-bb11-416ab51f98bc-2a19434a-3a64-496e-b07b-b51b0445384c-22525be7-82c7-4a72-8594-238712d4d59e

總結

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • java生成隨機數(shù)的方法

    java生成隨機數(shù)的方法

    這篇文章主要介紹了java生成隨機數(shù)的方法,涉及java隨機數(shù)及字符串操作的相關技巧,需要的朋友可以參考下
    2015-05-05
  • Spring Cloud中配置客戶端示例詳解

    Spring Cloud中配置客戶端示例詳解

    這篇文章主要介紹了Spring Cloud中配置客戶端的相關知識,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-09-09
  • 如何處理器攔截器(HandlerInterceptor)

    如何處理器攔截器(HandlerInterceptor)

    這篇文章主要介紹了如何處理器攔截器(HandlerInterceptor)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Springboot 如何使用@Async整合線程池

    Springboot 如何使用@Async整合線程池

    這篇文章主要介紹了Springboot 使用@Async整合線程池的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • postman中實現(xiàn)傳遞@RequestBody參數(shù)

    postman中實現(xiàn)傳遞@RequestBody參數(shù)

    這篇文章主要介紹了postman中實現(xiàn)傳遞@RequestBody參數(shù),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • 基于OpenCv與JVM實現(xiàn)加載保存圖像功能(JAVA?圖像處理)

    基于OpenCv與JVM實現(xiàn)加載保存圖像功能(JAVA?圖像處理)

    openCv有一個名imread的簡單函數(shù),用于從文件中讀取圖像,本文給大家介紹JAVA?圖像處理基于OpenCv與JVM實現(xiàn)加載保存圖像功能,感興趣的朋友一起看看吧
    2022-01-01
  • SpringBoot熱部署啟動關閉流程詳解

    SpringBoot熱部署啟動關閉流程詳解

    Spring?Boot啟動熱部署是一種技術,它能讓開發(fā)者在不重啟應用程序的情況下實時更新代碼。這樣可以提高開發(fā)效率,避免頻繁重啟應用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2023-04-04
  • SpringBoot性能優(yōu)化的其中配置方法

    SpringBoot性能優(yōu)化的其中配置方法

    SpringBoot作為Java生態(tài)中最流行的微服務框架之一,以其開箱即用、快速開發(fā)的特性贏得了廣泛青睞,然而,許多開發(fā)者在日常使用中往往只關注了基礎功能,忽略了框架提供的許多高性能配置選項,本文將深入剖析7個鮮為人知但極具價值的SpringBoot配置技巧
    2025-09-09
  • IntelliJ?IDEA設置JVM運行參數(shù)的圖文介紹

    IntelliJ?IDEA設置JVM運行參數(shù)的圖文介紹

    這篇文章主要介紹了IntelliJ?IDEA設置JVM運行參數(shù)的方法,包括配置方式及優(yōu)先級,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-04-04
  • Java 淺復制和深復制的實例詳解

    Java 淺復制和深復制的實例詳解

    這篇文章主要介紹了Java 淺復制和深復制的實例詳解的相關資料,這里提供實例幫助大家學習理解這部分內(nèi)容,需要的朋友可以參考下
    2017-08-08

最新評論

玛多县| 东光县| 双柏县| 农安县| 阿克苏市| 松滋市| 库车县| 通州区| 新营市| 大港区| 且末县| 买车| 长春市| 江阴市| 平陆县| 涞水县| 吉木萨尔县| 团风县| 山东省| 朔州市| 陇川县| 巨野县| 石景山区| 凯里市| 佳木斯市| 成安县| 夏邑县| 繁峙县| 新邵县| 逊克县| 卢龙县| 清丰县| 屯留县| 洛阳市| 玉树县| 苍南县| 天津市| 莱芜市| 泽普县| 黑山县| 临邑县|