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

什么是Base64以及在Java中如何使用Base64編碼

 更新時間:2024年12月07日 11:51:32   作者:三汘  
這篇文章主要介紹了什么是Base64以及在Java中如何使用Base64編碼的相關資料,文中包括Base64編碼的基本原理、應用、Java實現(xiàn)、URL安全編碼以及在JavaScript中的使用方法,需要的朋友可以參考下

1. Base64編碼介紹

Base64編碼: Base是MIME的一種編碼方式,MIME規(guī)范中定義了Base64編碼作為一種可靠的方式,用于在文本協(xié)議中表示二進制數(shù)據(jù)。通過使用Base64編碼,可以將二進制數(shù)據(jù)轉(zhuǎn)換為可打印的ACSII字符即Base64編碼是從二進制到字符的過程,從而保證數(shù)據(jù)在傳輸過程中不受損失,并且能夠被各種文本協(xié)議(如SMTP、HTTP)正確處理。

Base64編碼與加密算法: 嚴格來說,Base64的加密解密是指編碼格式,而非加密算法。

Base64編碼的應用: 在MIME中,當需要在文本協(xié)議中傳輸二進制數(shù)據(jù)(如郵件附件或圖片數(shù)據(jù))時,通常會將二進制數(shù)據(jù)先進行Base64編碼,然后將編碼后的數(shù)據(jù)作為文本內(nèi)容(字符串形式)進行網(wǎng)絡傳輸,或者進行存儲

Bsae64編碼的格式: Base64是一種用64個字符(0-9,a-z,A-Z,+,/)來表示二進制數(shù)據(jù)的方法,是基于64個可打印字符進行編碼的。Base是一種索引編碼,每6個bit位作為一個單元,對應一個字符,為了保證所輸出的編碼為可讀字符,Base64制定了一個編碼表,以便進行統(tǒng)一轉(zhuǎn)換,編碼表的大小為2^6=64,這也是Base64名稱的由來。

Base64編碼表:

Base64編碼的原理: Base64編碼要求把3個8bit的字節(jié)(3*8=24bit)轉(zhuǎn)換為4個6bit的字節(jié)(4*6=24bit),之后在6bit位的前面補兩個0,形成8位一個字節(jié)的形式。如果剩下的字符不足三個字節(jié)(將字符串以3個字符為一組,當最后一組不夠3個字符時),則用0補齊,以達到24個bit,當填充后有6個bit位都為0時,則使用字符=進行表示,因此編碼后輸出的文本末尾可能會出現(xiàn)1或2個=。

ASCII碼轉(zhuǎn)Base64: ASCII是8個bit為一個字節(jié),Base64是6個bit為一個字節(jié)。

示例1,正好有3個字符時: ASCII編碼you,Base64編碼eW91。

示例2,只有2個字符時: ASCII編碼yo,Base64編碼eW8=。

示例3,只有1個字符時: ASCII編碼y,Base64編碼eQ==。

2. Java實現(xiàn)Base64編碼

2.1 使用Base64進行編碼

Base64類: 全類名為java.util.Base64,在JDK8及以上版本中,可以直接使用該類實現(xiàn)Base64編碼和解碼。如果JDK版本低于8,使用org.apache.commons.codec.binary.Base64。

使用Base64對文本進行編碼和解碼:

@Test
public void test(){
    String content = "asnhlkqwe8uj12j3";
    // 獲取文本的字節(jié)信息
    byte[] bytes = content.getBytes(StandardCharsets.UTF_8);//[97, 115, 110, 104, 108, 107, 113, 119, 101, 56, 117, 106, 49, 50, 106, 51]
    // 對文本的字節(jié)信息進行Base64編碼
    byte[] encode = Base64.getEncoder().encode(bytes);//[89, 88, 78, 117, 97, 71, 120, 114, 99, 88, 100, 108, 79, 72, 86, 113, 77, 84, 74, 113, 77, 119, 61, 61]
    // 將Base64編碼的字節(jié)轉(zhuǎn)換成ASCII碼對應的字符串
    String s1 = new String(encode, StandardCharsets.UTF_8);//YXNuaGxrcXdlOHVqMTJqMw==
    // 對文本的字節(jié)信息進行Base64編碼,轉(zhuǎn)換成ASCII碼對應的字符串
    String s2 = Base64.getEncoder().encodeToString(bytes);//YXNuaGxrcXdlOHVqMTJqMw==

    // 對Base64編碼的字符串進行解碼,獲取原始的文本的字節(jié)信息
    byte[] decode = Base64.getDecoder().decode(s2);//[97, 115, 110, 104, 108, 107, 113, 119, 101, 56, 117, 106, 49, 50, 106, 51]
    // 將字節(jié)信息轉(zhuǎn)換成對應的文本
    String s3 = new String(decode, StandardCharsets.UTF_8);//asnhlkqwe8uj12j3
}

使用Base64對圖片進行編碼和解碼:

@Test
public void test4() throws IOException {
    // 獲取圖片文件
    File file = new File("C:\\Users\\sq\\Desktop\\2024.png");
    // 獲取圖片文件的字節(jié)信息
    byte[] bytes = Files.readAllBytes(file.toPath());
    // 使用Base64進行編碼,并轉(zhuǎn)換成Base64編碼表中對應字符組成的字符串
    String s = Base64.getEncoder().encodeToString(bytes);

    // 將Base64編碼的字符串保存在文本文件中
    Files.writeString(new File("C:\\Users\\sq\\Desktop\\te.txt").toPath(), s);

    // 獲取文本文件
    File file1 = new File("C:\\Users\\sq\\Desktop\\te.txt");
    // 獲取文本文件中保存的字符串對應的字節(jié)信息,使用ASCII碼表示
    byte[] bytes1 = Files.readAllBytes(file1.toPath());
    // 將ASCII碼轉(zhuǎn)換成對應字符串,此處s1=s
    String s1 = new String(bytes1, StandardCharsets.UTF_8);

    // 對Base64編碼的字符串進行解碼,獲取原始的圖片文件的字節(jié)信息,此處decode=bytes
    byte[] decode = Base64.getDecoder().decode(s1);
    // 創(chuàng)建文件,將字節(jié)信息轉(zhuǎn)換成圖片
    Files.write(new File("C:\\Users\\sq\\Desktop\\2024.png").toPath(),decode);
}

2.2 使用Base64Utils編碼

Base64Utils: 全類名為org.springframework.util.Base64Utils,是Spring框架中的一個工具類,主要用于處理Base64編碼和解碼的操作,Base64Utils簡化了Base64編碼和解碼的過程。

對文本數(shù)據(jù)進行編碼和解碼:

@Test
public void test2(){
    String content = "asnhlkqwe8uj12j3";
    byte[] bytes = content.getBytes(StandardCharsets.UTF_8);//[97, 115, 110, 104, 108, 107, 113, 119, 101, 56, 117, 106, 49, 50, 106, 51]
    String s1 = Base64Utils.encodeToString(bytes);//YXNuaGxrcXdlOHVqMTJqMw==

    byte[] decode = Base64Utils.decodeFromString(s1);//[97, 115, 110, 104, 108, 107, 113, 119, 101, 56, 117, 106, 49, 50, 106, 51]
    String s2 = new String(decode, StandardCharsets.UTF_8);//asnhlkqwe8uj12j3
}

2.3 URL安全相關的Base64編碼

URL不安全的Base64編碼: 如果不使用URL安全的編碼方式,URL編碼器會把標準Base64中的“/”和“+”字符變?yōu)樾稳?ldquo;%XX”的形式(即經(jīng)過Base64編碼后的字符串在通過URL參數(shù)進行網(wǎng)絡傳輸時,瀏覽器會自動對特殊字符進行URL編碼),而這些“%”在存入數(shù)據(jù)庫時還需要再進行轉(zhuǎn)換(URL解碼),因為ANSI SQL中已將“%”號用作模糊查詢like的通配符。

@Test
public void test2(){
    String content = "ab?";
    byte[] bytes = content.getBytes(StandardCharsets.UTF_8);//[97, 98, 63]
    byte[] encode = Base64Utils.encode(bytes);//[89, 87, 73, 47]
    String s1 = Base64Utils.encodeToString(bytes);//YWI/

    byte[] decode = Base64Utils.decodeFromString(s1);//[97, 98, 63]
    String s2 = new String(decode, StandardCharsets.UTF_8);//ab?
}

@Test
public void test6(){
    String content = "ab>";
    byte[] bytes = content.getBytes(StandardCharsets.UTF_8);//[97, 98, 62]
    String s1 = Base64Utils.encodeToString(bytes);//YWI+

    byte[] decode = Base64Utils.decodeFromString(s1);//[97, 98, 62]
    String s2 = new String(decode, StandardCharsets.UTF_8);//ab>
}

URL安全的Base64編碼: 將/轉(zhuǎn)換為_,將+轉(zhuǎn)換為-。

@Test
public void test5(){
    String content = "ab?";
    byte[] bytes = content.getBytes(Standar	dCharsets.UTF_8);//[97, 98, 63]

    byte[] bytes1 = Base64Utils.encodeUrlSafe(bytes);//[89, 87, 73, 95]
    String s = new String(bytes1, StandardCharsets.UTF_8);//YWI_
    String s1 = Base64Utils.encodeToUrlSafeString(bytes);//YWI_

    byte[] decode = Base64Utils.decodeFromUrlSafeString(s1);//[97, 98, 63]
    String s2 = new String(decode, StandardCharsets.UTF_8);//ab?
}

@Test
public void test5(){
    String content = "ab>";
    byte[] bytes = content.getBytes(StandardCharsets.UTF_8);//[97, 98, 62]

    byte[] bytes1 = Base64Utils.encodeUrlSafe(bytes);//[89, 87, 73, 45]
    String s = new String(bytes1, StandardCharsets.UTF_8);//YWI-
    String s1 = Base64Utils.encodeToUrlSafeString(bytes);//YWI-

    byte[] decode = Base64Utils.decodeFromUrlSafeString(s1);//[97, 98, 62]
    String s2 = new String(decode, StandardCharsets.UTF_8);//ab>
}

3. Shell使用base64編碼

編碼:

# -n表示不打印尾隨換行符
echo -n 'asnhlkqwe8uj12j3' | base64
YXNuaGxrcXdlOHVqMTJqMw==

解碼:

# 或-d
echo 'YXNuaGxrcXdlOHVqMTJqMw==' | base64 --decode
asnhlkqwe8uj12j3

4. js中使用base64編碼

打開瀏覽器的F12控制臺,輸入以下命令:

編碼:

window.btoa("asnhlkqwe8uj12j3")
YXNuaGxrcXdlOHVqMTJqMw

解碼:

window.aotb("YXNuaGxrcXdlOHVqMTJqMw")
asnhlkqwe8uj12j3

總結(jié) 

到此這篇關于什么是Base64以及在Java中如何使用Base64編碼的文章就介紹到這了,更多相關Java使用Base64編碼內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • JVM垃圾回收算法的概念與分析

    JVM垃圾回收算法的概念與分析

    這篇文章主要給大家介紹了關于JVM垃圾回收算法的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用JVM具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-12-12
  • Springboot對接mqtt的項目實踐

    Springboot對接mqtt的項目實踐

    在SpringBoot中對接MQTT協(xié)議,可以使用Eclipse Paho客戶端和Spring Integration MQTT模塊,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2026-02-02
  • SpringBoot中WebClient的實踐過程

    SpringBoot中WebClient的實踐過程

    本文介紹了SpringBoot中WebClient的使用,包括配置、使用場景以及優(yōu)化策略,幫助開發(fā)者更高效地進行服務間通信,WebClient具有非阻塞式I/O、強大的功能、靈活性等優(yōu)點,適用于高并發(fā)場景,通過合理配置和優(yōu)化,可以顯著提升服務間通信的效率和可靠性
    2025-12-12
  • 詳解springmvc控制登錄用戶session失效后跳轉(zhuǎn)登錄頁面

    詳解springmvc控制登錄用戶session失效后跳轉(zhuǎn)登錄頁面

    本篇文章主要介紹了springmvc控制登錄用戶session失效后跳轉(zhuǎn)登錄頁面,session一旦失效就需要重新登陸,有興趣的同學可以了解一下。
    2017-01-01
  • SpringBoot集成WebSocket實現(xiàn)后臺向前端推送信息

    SpringBoot集成WebSocket實現(xiàn)后臺向前端推送信息

    在一次項目開發(fā)中,使用到了Netty網(wǎng)絡應用框架,以及MQTT進行消息數(shù)據(jù)的收發(fā),這其中需要后臺來將獲取到的消息主動推送給前端,所以本文記錄了SpringBoot集成WebSocket實現(xiàn)后臺向前端推送信息的操作,需要的朋友可以參考下
    2024-02-02
  • 全解史上最快的JOSN解析庫alibaba Fastjson

    全解史上最快的JOSN解析庫alibaba Fastjson

    這篇文章主要介紹了史上最快的JOSN解析庫alibaba Fastjson,對FastJson感興趣的同學,一定要看一下
    2021-04-04
  • 詳解SpringMVC從基礎到源碼

    詳解SpringMVC從基礎到源碼

    這篇文章主要介紹了詳解SpringMVC從基礎到源碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-09-09
  • Spring Boot 中 @Scheduled 定時任務不生效的原因及解決方法

    Spring Boot 中 @Scheduled 定時任務不生效的原因及解決方法

    SpringBoot中@Scheduled注解用于創(chuàng)建定時任務,但有時任務可能不生效,本文介紹Spring Boot 中 @Scheduled 定時任務不生效的原因及解決方法,感興趣的朋友跟隨小編一起看看吧
    2025-11-11
  • 關于Java父類沒有無參構造方法子類處理方法

    關于Java父類沒有無參構造方法子類處理方法

    父類無參構造方法,子類不寫,其實會默認調(diào)用父類的無參構造方法也就是用super(),編譯運行后,會打印出"子類會調(diào)用Father的第一個構造方法,這篇文章給大家介紹關于Java父類沒有無參構造方法子類處理方法,感興趣的朋友一起看看吧
    2024-01-01
  • 深入剖析ArrayList的remove方法

    深入剖析ArrayList的remove方法

    這篇文章主要介紹了ArrayList的remove方法使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教。</p>
    2021-09-09

最新評論

商河县| 饶河县| 老河口市| 武义县| 蒙自县| 邓州市| 元阳县| 雅安市| 理塘县| 灵武市| 扎赉特旗| 嘉定区| 龙山县| 南京市| 包头市| 新沂市| 靖边县| 连南| 中阳县| 西畴县| 海盐县| 明水县| 绿春县| 抚远县| 兴业县| 彰化市| 巩留县| 凤山县| 伊宁县| 三门县| 桐梓县| 醴陵市| 平顺县| 武城县| 通化县| 扶沟县| 建德市| 长垣县| 卓资县| 卢湾区| 万载县|