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

java中BASE64加密/解密詳解(附帶源碼)

 更新時(shí)間:2025年05月06日 10:37:43   作者:Katie。  
這篇文章主要介紹了java中BASE64加密/解密的相關(guān)資料,并詳細(xì)展示了如何在Java中使用內(nèi)置的Base64類進(jìn)行編碼和解碼,文章還涵蓋不同類型的Base64編碼及其應(yīng)用場景,需要的朋友可以參考下

1. 項(xiàng)目背景與介紹

在日常開發(fā)中,Base64 編碼是一種常見的數(shù)據(jù)處理方式,廣泛應(yīng)用于以下場景:

  • 數(shù)據(jù)傳輸:將二進(jìn)制數(shù)據(jù)轉(zhuǎn)換為 ASCII 字符串,方便在文本協(xié)議(如 JSON、XML)中傳輸。
  • 數(shù)據(jù)存儲:避免特殊字符導(dǎo)致的數(shù)據(jù)解析錯(cuò)誤,例如在 URL 或 Cookie 中存儲二進(jìn)制數(shù)據(jù)。
  • 加密輔助:用于編碼密鑰、證書、公私鑰等,但 Base64 本身并不是加密算法,它只是編碼方式。

本項(xiàng)目將展示如何使用 Java 內(nèi)置的 Base64 類進(jìn)行 Base64 編碼(加密)和解碼(解密)。

2. 相關(guān)知識

2.1 Base64 簡介

Base64 是一種基于 64 個(gè)可打印字符的編碼方式,它可以將 任意二進(jìn)制數(shù)據(jù)轉(zhuǎn)換為 ASCII 字符串,避免在傳輸或存儲時(shí)出現(xiàn)編碼問題。

Base64 采用的 64 個(gè)字符如下(大小寫字母 + 數(shù)字 + 兩個(gè)符號):

ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz
0123456789
+/

此外,Base64 可能會在末尾填充 = 號,使其長度為 4 的倍數(shù)。

2.2 Java Base64 類

從 Java 8 開始,java.util.Base64 提供了三種 Base64 編碼器:

編碼器說明
Base64.getEncoder()標(biāo)準(zhǔn) Base64 編碼
Base64.getUrlEncoder()URL 安全的 Base64 編碼(+ 替換為 -,/ 替換為 _
Base64.getMimeEncoder()MIME 編碼(每 76 個(gè)字符換行)

相應(yīng)地,解碼器 Base64.getDecoder() 可以將 Base64 字符串轉(zhuǎn)換回原始數(shù)據(jù)。

3. 項(xiàng)目實(shí)現(xiàn)思路

  • 編碼(加密)
    • 通過 Base64.getEncoder().encodeToString(byte[]) 方法,將字符串轉(zhuǎn)換為 Base64 編碼格式。
  • 解碼(解密)
    • 通過 Base64.getDecoder().decode(String) 方法,將 Base64 編碼的數(shù)據(jù)轉(zhuǎn)換回原始字符串。
  • 實(shí)現(xiàn)不同 Base64 變體
    • 標(biāo)準(zhǔn) Base64:用于常規(guī)數(shù)據(jù)編碼。
    • URL Base64:適用于 URL 傳輸,避免 + 和 / 影響 URL 解析。
    • MIME Base64:適用于電子郵件或其他需要換行的場景。

4. 完整代碼實(shí)現(xiàn)

以下 Java 代碼實(shí)現(xiàn)了 Base64 編碼和解碼功能,支持三種模式(標(biāo)準(zhǔn)、URL 安全、MIME)。

import java.util.Base64;

/**
 * Base64EncoderDecoder 類用于演示 Java 8 提供的 Base64 編碼和解碼功能。
 * 該類支持三種編碼模式:標(biāo)準(zhǔn) Base64、URL 安全 Base64、MIME Base64。
 */
public class Base64EncoderDecoder {

    /**
     * 使用標(biāo)準(zhǔn) Base64 編碼字符串
     *
     * @param input 原始字符串
     * @return Base64 編碼后的字符串
     */
    public static String encodeBase64(String input) {
        return Base64.getEncoder().encodeToString(input.getBytes());
    }

    /**
     * 使用標(biāo)準(zhǔn) Base64 解碼字符串
     *
     * @param base64Str Base64 編碼的字符串
     * @return 解碼后的原始字符串
     */
    public static String decodeBase64(String base64Str) {
        byte[] decodedBytes = Base64.getDecoder().decode(base64Str);
        return new String(decodedBytes);
    }

    /**
     * 使用 URL 安全的 Base64 編碼字符串
     *
     * @param input 原始字符串
     * @return URL 安全的 Base64 編碼字符串
     */
    public static String encodeBase64Url(String input) {
        return Base64.getUrlEncoder().encodeToString(input.getBytes());
    }

    /**
     * 使用 URL 安全的 Base64 解碼字符串
     *
     * @param base64UrlStr URL 安全的 Base64 編碼字符串
     * @return 解碼后的原始字符串
     */
    public static String decodeBase64Url(String base64UrlStr) {
        byte[] decodedBytes = Base64.getUrlDecoder().decode(base64UrlStr);
        return new String(decodedBytes);
    }

    /**
     * 使用 MIME Base64 編碼字符串(適用于郵件和換行文本)
     *
     * @param input 原始字符串
     * @return MIME Base64 編碼的字符串
     */
    public static String encodeBase64Mime(String input) {
        return Base64.getMimeEncoder().encodeToString(input.getBytes());
    }

    /**
     * 主方法,測試 Base64 編碼與解碼
     *
     * @param args 命令行參數(shù)
     */
    public static void main(String[] args) {
        String originalString = "Hello, Base64!";

        // 標(biāo)準(zhǔn) Base64 編碼/解碼
        String encoded = encodeBase64(originalString);
        String decoded = decodeBase64(encoded);

        System.out.println("原始字符串: " + originalString);
        System.out.println("Base64 編碼: " + encoded);
        System.out.println("Base64 解碼: " + decoded);

        // URL Base64 編碼/解碼
        String urlEncoded = encodeBase64Url(originalString);
        String urlDecoded = decodeBase64Url(urlEncoded);

        System.out.println("\nURL 安全 Base64 編碼: " + urlEncoded);
        System.out.println("URL 安全 Base64 解碼: " + urlDecoded);

        // MIME Base64 編碼(用于郵件等換行文本)
        String mimeEncoded = encodeBase64Mime(originalString);
        System.out.println("\nMIME Base64 編碼: " + mimeEncoded);
    }
}

5. 代碼解讀

5.1 標(biāo)準(zhǔn) Base64 編碼

  • 使用 Base64.getEncoder().encodeToString(byte[]) 將字符串轉(zhuǎn)換為 Base64 編碼格式。
  • 解碼時(shí)使用 Base64.getDecoder().decode(String),轉(zhuǎn)換回原始字符串。

5.2 URL 安全 Base64 編碼

  • Base64.getUrlEncoder() 生成的 Base64 字符串避免了 + 和 /,適用于 URL 傳輸。
  • Base64.getUrlDecoder() 進(jìn)行解碼。

5.3 MIME Base64 編碼

  • Base64.getMimeEncoder() 適用于需要換行的場景(如電子郵件、長文本)。
  • 由于 MIME 形式的 Base64 可能包含換行符,解碼時(shí)需注意處理換行問題。

6. 項(xiàng)目總結(jié)與擴(kuò)展

6.1 本項(xiàng)目的收獲

  • 掌握 Base64 基本原理:理解 Base64 如何轉(zhuǎn)換二進(jìn)制數(shù)據(jù)為可打印字符,及其應(yīng)用場景。
  • 熟悉 Java Base64 API:學(xué)會使用 Base64 類進(jìn)行標(biāo)準(zhǔn)、URL 安全和 MIME 編碼/解碼。
  • 區(qū)分編碼與加密:Base64 只是編碼方式,不具備加密能力,應(yīng)與加密算法結(jié)合使用(如 AES + Base64)。

6.2 可能的擴(kuò)展方向

  • 結(jié)合 AES、RSA 加密:Base64 可用于存儲和傳輸加密數(shù)據(jù)。
  • 結(jié)合 JWT 認(rèn)證:JWT 的 payload 采用 Base64 編碼。
  • 應(yīng)用于 HTTP 認(rèn)證:Basic Auth 使用 Base64 傳輸用戶名和密碼(但不安全,應(yīng)配合 HTTPS)。

通過本項(xiàng)目的實(shí)現(xiàn),讀者不僅可以掌握 Base64 編碼/解碼的基本方法,還能更好地理解其在信息傳輸和數(shù)據(jù)存儲中的實(shí)際應(yīng)用。希望這篇文章能幫助你深入理解 Base64 技術(shù),并在項(xiàng)目中靈活應(yīng)用。

總結(jié)

到此這篇關(guān)于java中BASE64加密/解密的文章就介紹到這了,更多相關(guān)java BASE64加密/解密內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Springboot通過圖片路徑形式獲取圖片

    Springboot通過圖片路徑形式獲取圖片

    這篇文章主要介紹了Springboot通過圖片路徑形式獲取圖片,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • Maven Optional依賴屬性的含義及妙用

    Maven Optional依賴屬性的含義及妙用

    這篇文章主要為大家介紹了Maven Optional依賴屬性的含義及妙用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • Java?詳細(xì)講解線程的狀態(tài)及部分常用方法

    Java?詳細(xì)講解線程的狀態(tài)及部分常用方法

    在Java程序中,一個(gè)線程對象只能調(diào)用一次start()方法啟動新線程,并在新線程中執(zhí)行run()方法。一旦run()方法執(zhí)行完畢,線程就結(jié)束了,本篇來講解Java線程的狀態(tài)以及部分常用方法
    2022-04-04
  • 詳解Java實(shí)現(xiàn)單例的五種方式

    詳解Java實(shí)現(xiàn)單例的五種方式

    這篇文章主要介紹了詳解Java實(shí)現(xiàn)單例的五種方式,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-07-07
  • Java中的@Conditional條件注解詳細(xì)解析

    Java中的@Conditional條件注解詳細(xì)解析

    這篇文章主要介紹了Java中的@Conditional條件注解詳細(xì)解析,@Conditional是Spring4新提供的注解,它的作用是按照一定的條件進(jìn)行判斷,滿足條件給容器注冊bean,需要的朋友可以參考下
    2023-11-11
  • 詳談JSON與Javabean轉(zhuǎn)換的幾種形式

    詳談JSON與Javabean轉(zhuǎn)換的幾種形式

    下面小編就為大家?guī)硪黄斦凧SON與Javabean轉(zhuǎn)換的幾種形式。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-08-08
  • Java實(shí)現(xiàn)ArrayList自動擴(kuò)容

    Java實(shí)現(xiàn)ArrayList自動擴(kuò)容

    ArrayList的擴(kuò)容規(guī)則是非常簡單的,它會根據(jù)需要自動擴(kuò)容,本文就來介紹一下Java實(shí)現(xiàn)ArrayList自動擴(kuò)容,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-12-12
  • Java課設(shè)案例之百行代碼實(shí)現(xiàn)簡易計(jì)算器

    Java課設(shè)案例之百行代碼實(shí)現(xiàn)簡易計(jì)算器

    下面這篇文章主要給大家介紹了關(guān)于Java課設(shè)案例之百行代碼實(shí)現(xiàn)簡易計(jì)算器的相關(guān)資料,這是一個(gè)關(guān)于java簡單計(jì)算器的完整課程設(shè)計(jì)以及源碼,需要的朋友可以參考下
    2023-06-06
  • Spring Boot ActiveMQ連接池配置過程解析

    Spring Boot ActiveMQ連接池配置過程解析

    這篇文章主要介紹了Spring Boot ActiveMQ連接池配置過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • JAVA字符串類型switch的底層原理詳析

    JAVA字符串類型switch的底層原理詳析

    這篇文章主要給大家介紹了關(guān)于JAVA字符串類型switch的底層原理的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用JAVA具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09

最新評論

龙州县| 图们市| 霍林郭勒市| 龙江县| 鄂州市| 大理市| 金湖县| 三门县| 余江县| 六盘水市| 伊金霍洛旗| 大丰市| 吉安市| 沛县| 桐柏县| 信宜市| 县级市| 临泉县| 云霄县| 西青区| 高阳县| 大渡口区| 黄山市| 彰化县| 张家港市| 汝阳县| 滕州市| 芮城县| 南乐县| 得荣县| 泽库县| 梓潼县| 沙河市| 政和县| 项城市| 沅江市| 金沙县| 渭源县| 保定市| 离岛区| 从江县|