激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專(zhuān)注于服務(wù)器技術(shù)及軟件下載分享
分類(lèi)導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語(yǔ)言|JavaScript|易語(yǔ)言|vb.net|

香港云服务器
服務(wù)器之家 - 編程語(yǔ)言 - Java教程 - java中Base64編碼原理實(shí)例講解

java中Base64編碼原理實(shí)例講解

2021-08-06 12:14陸十三 Java教程

這篇文章主要介紹了java中Base64編碼原理實(shí)例講解,文章講解的很清晰,有對(duì)于這方面不太懂的同學(xué)可以研究下

什么是 Base64 編碼

Base64 編碼是最常見(jiàn)的編碼方式,基于 64 個(gè)可打印字符來(lái)表示任意二進(jìn)制數(shù)據(jù)的方法,是從二進(jìn)制轉(zhuǎn)換到可見(jiàn)字符的過(guò)程。

使用場(chǎng)景

數(shù)據(jù)加密或簽名通過(guò) Base64 轉(zhuǎn)換為字符串存儲(chǔ)或傳輸。
不能傳輸文件的網(wǎng)絡(luò)環(huán)境可以轉(zhuǎn)換 Base64 進(jìn)行網(wǎng)絡(luò)傳輸。
在文本資源(如 HTML 和 CSS文件)中嵌入圖片文件或其他二進(jìn)制資源。
在 URL、網(wǎng)頁(yè)中傳輸少量二進(jìn)制數(shù)據(jù)等等。

Base64 編碼原理

原理是把每 3 個(gè)字節(jié)(每個(gè)字節(jié)為 8 位, 3 個(gè)字節(jié)為 24 位)重新劃為 4 組(每組為 6位,高位補(bǔ)兩個(gè) 0 為 8 位后作為一個(gè)新字節(jié),劃分后的每個(gè)字節(jié)數(shù)值的范圍是 00000000 - 00111111 即十進(jìn)制的 0 - 63),然后將劃分后的字節(jié)的數(shù)值作為索引查編碼表,獲得相應(yīng)的字符,從而得到編碼后的字符串。通過(guò) 64 個(gè)字符來(lái)對(duì)任意數(shù)據(jù)進(jìn)行編碼,因此稱(chēng)為 Base64。

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

java中Base64編碼原理實(shí)例講解

以字符串 “NEW” 為例,對(duì)其 Base64 編碼:

java中Base64編碼原理實(shí)例講解

如果要編碼的字節(jié)數(shù)不能被 3 整除,最后會(huì)多出 1 個(gè)或 2 有效的字節(jié)。將這樣處理,將其用 0 補(bǔ)充至 6 的最小倍數(shù)位后,剩余的空位將使用 “=” 填充處理。例如:

java中Base64編碼原理實(shí)例講解
java中Base64編碼原理實(shí)例講解

經(jīng)過(guò) Base64 編碼后數(shù)據(jù)會(huì)增大,數(shù)據(jù)經(jīng)過(guò) Base64 處理后,由原來(lái)每 3 個(gè)字節(jié),變?yōu)闉?4 個(gè)字節(jié),數(shù)據(jù)大小會(huì)變?yōu)樵瓉?lái)的 4/3, 因此數(shù)據(jù)增大 1/3。

對(duì)于字符內(nèi)容,相同字符串不同的字符編碼(如 utf-8 與 gbk)的 Base64 編碼結(jié)果會(huì)不一樣。Base64 是一種通過(guò)查表的編碼方法,不能用于加密,即使是自定義編碼表也不行。

JDK 內(nèi)置的 Base64 API

在 JDK 7 之前可以使用 sun.misc.BASE64Encoder 和 sun.misc.BASE64Decoder 來(lái) Base64 編碼解碼,但 com.sun 開(kāi)頭的包不是公開(kāi)的,屬于 sun 的內(nèi)部方法,不建議使用。所以可以使用 Apache 提供的工具包(commons-codec-1.11.jar)來(lái)進(jìn)行 Base64 編碼解碼。

從 JDK 7 開(kāi)始 Oracle 發(fā)表了聲明,不希望 Java 程序調(diào)用 JDK 系統(tǒng)包中以 sun 開(kāi)頭的類(lèi)(www.oracle.com/technetwork/java/faq-sun-packages-142232.html)。

從 JKD 8 開(kāi)始,Oracle 已經(jīng)把 Base64 進(jìn)行優(yōu)化并放到 JDK 的 java.util 包,所以推薦直接使用 java.util.Base64 進(jìn)行 Base64 編碼和解碼。

  1. // Base64 編碼
  2. String encoder = Base64.getEncoder().encodeToString("但愿人長(zhǎng)久 千里共嬋娟".getBytes());
  3. System.err.println(encoder);
  4.  
  5. // Base64 解碼
  6. String decoder = new String(Base64.getDecoder().decode(encoder));
  7. System.err.println(decoder);
  8.  
  9. // 結(jié)果
  10. // 5L2G5oS/5Lq66ZW/5LmFIOWNg+mHjOWFseWpteWonw==
  11. // 但愿人長(zhǎng)久 千里共嬋娟

標(biāo)準(zhǔn)的 Base64 編碼中可能出現(xiàn)字符 + 和 / 字符,不能直接用在 URL 中,需要對(duì)其進(jìn)行處理,把字符 + 和 / 分別變成 - 和 _ ,JDK 也提供了對(duì)應(yīng)的方法。

  1. // URL安全的 Base64 編碼
  2. String safeEncoder = Base64.getUrlEncoder().encodeToString("但愿人長(zhǎng)久 千里共嬋娟".getBytes());
  3. System.err.println(safeEncoder);
  4.  
  5. // URL安全的 Base64 解碼
  6. String safeDecoder = new String(Base64.getUrlDecoder().decode(safeEncoder));
  7. System.err.println(safeDecoder);
  8.  
  9. // 結(jié)果
  10. // 5L2G5oS_5Lq66ZW_5LmFIOWNg-mHjOWFseWpteWonw==
  11. // 但愿人長(zhǎng)久 千里共嬋娟

小結(jié)

Base64 是基于 64 個(gè)可打印字符來(lái)表示任意二進(jìn)制數(shù)據(jù)的方法。

Base64 通常用于數(shù)據(jù)加密或簽名后轉(zhuǎn)換為可見(jiàn)字符串,文本資源(如 HTML 和 CSS 中)中嵌入圖片文件等等。

原理是把二進(jìn)制數(shù)據(jù)每 3 個(gè)字節(jié)重新劃為 4 組(每三個(gè) 8 位字節(jié),即總共24位,可以由四個(gè) 6 位 Base64 數(shù)值表示),然后作為索引查編碼表,獲得相應(yīng)的字符,從而得到編碼后的字符串。

經(jīng)過(guò) Base64 編碼后數(shù)據(jù)會(huì)增大,因?yàn)槊?3 個(gè)字節(jié),重新劃分為 4 個(gè)字節(jié),數(shù)據(jù)大小會(huì)變?yōu)樵瓉?lái)的 4/3, 因此數(shù)據(jù)增大 1/3。

Base64 是一種通過(guò)索引查表的編碼方法,不能用于加密。

參考:
https://en.wikipedia.org/wiki/Base64
https://www.ietf.org/rfc/rfc4648.txt
https://www.liaoxuefeng.com/wiki/897692888725344/949441536192576

到此這篇關(guān)于java中Base64編碼原理實(shí)例講解的文章就介紹到這了,更多相關(guān)java中base64編碼原理內(nèi)容請(qǐng)搜索我們以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!

原文鏈接:https://www.cnblogs.com/newobjectcc/p/14391876.html

延伸 · 閱讀

精彩推薦
1317
主站蜘蛛池模板: 中文字幕免费看 | 国产精品久久久久影院老司 | 在线视频 欧美日韩 | 毛片免费视频 | 1级片在线观看 | 欧美 日韩 国产 成人 | 精品一区二区三区免费看 | 国产69精品99久久久久久宅男 | 欧美亚洲一级 | 538任你躁在线精品视频网站 | 国产999精品久久久久 | 毛片久久 | 精品一区二区三区在线视频 | 国产99久久精品一区二区 | 国产精品观看在线亚洲人成网 | 96视频在线免费观看 | 久久久久久免费 | 97超级碰碰人国产在线观看 | 午夜精品视频在线 | 亚洲码无人客一区二区三区 | 在线播放一级片 | 国产一级大片在线观看 | 黄色影院在线看 | av电影院在线观看 | 亚洲性爰 | 亚洲小视频在线播放 | 91精品国产乱码久久久久久久久 | 成人亚洲| 毛片免费看电影 | 亚洲国产资源 | 鸥美一级片 | 久草在线手机视频 | 黄色欧美精品 | 高清国产一区二区三区四区五区 | 1级黄色毛片 | 97超级碰碰人国产在线观看 | 国产精品自拍99 | 精品国产一区二区三区蜜殿 | 久久中文免费 | 天海翼无删减av三级在线观看 | 日韩毛片网|