一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - java中Base64編碼原理實例講解

java中Base64編碼原理實例講解

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

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

什么是 Base64 編碼

Base64 編碼是最常見的編碼方式,基于 64 個可打印字符來表示任意二進制數據的方法,是從二進制轉換到可見字符的過程。

使用場景

數據加密或簽名通過 Base64 轉換為字符串存儲或傳輸。
不能傳輸文件的網絡環境可以轉換 Base64 進行網絡傳輸。
在文本資源(如 HTML 和 CSS文件)中嵌入圖片文件或其他二進制資源。
在 URL、網頁中傳輸少量二進制數據等等。

Base64 編碼原理

原理是把每 3 個字節(每個字節為 8 位, 3 個字節為 24 位)重新劃為 4 組(每組為 6位,高位補兩個 0 為 8 位后作為一個新字節,劃分后的每個字節數值的范圍是 00000000 - 00111111 即十進制的 0 - 63),然后將劃分后的字節的數值作為索引查編碼表,獲得相應的字符,從而得到編碼后的字符串。通過 64 個字符來對任意數據進行編碼,因此稱為 Base64。

Base64 標準編碼表:

java中Base64編碼原理實例講解

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

java中Base64編碼原理實例講解

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

java中Base64編碼原理實例講解
java中Base64編碼原理實例講解

經過 Base64 編碼后數據會增大,數據經過 Base64 處理后,由原來每 3 個字節,變為為 4 個字節,數據大小會變為原來的 4/3, 因此數據增大 1/3。

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

JDK 內置的 Base64 API

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

從 JDK 7 開始 Oracle 發表了聲明,不希望 Java 程序調用 JDK 系統包中以 sun 開頭的類(www.oracle.com/technetwork/java/faq-sun-packages-142232.html)。

從 JKD 8 開始,Oracle 已經把 Base64 進行優化并放到 JDK 的 java.util 包,所以推薦直接使用 java.util.Base64 進行 Base64 編碼和解碼。

  1. // Base64 編碼
  2. String encoder = Base64.getEncoder().encodeToString("但愿人長久 千里共嬋娟".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. // 結果
  10. // 5L2G5oS/5Lq66ZW/5LmFIOWNg+mHjOWFseWpteWonw==
  11. // 但愿人長久 千里共嬋娟

標準的 Base64 編碼中可能出現字符 + 和 / 字符,不能直接用在 URL 中,需要對其進行處理,把字符 + 和 / 分別變成 - 和 _ ,JDK 也提供了對應的方法。

  1. // URL安全的 Base64 編碼
  2. String safeEncoder = Base64.getUrlEncoder().encodeToString("但愿人長久 千里共嬋娟".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. // 結果
  10. // 5L2G5oS_5Lq66ZW_5LmFIOWNg-mHjOWFseWpteWonw==
  11. // 但愿人長久 千里共嬋娟

小結

Base64 是基于 64 個可打印字符來表示任意二進制數據的方法。

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

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

經過 Base64 編碼后數據會增大,因為每 3 個字節,重新劃分為 4 個字節,數據大小會變為原來的 4/3, 因此數據增大 1/3。

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

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

到此這篇關于java中Base64編碼原理實例講解的文章就介紹到這了,更多相關java中base64編碼原理內容請搜索我們以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 五月天91| chinese男男gay| 国产在线视频在线观看 | 欧美一级裸片 | 99精品偷自拍 | 亚洲四虎 | 日本高清有码视频 | a级毛片毛片免费很很综合 a级黄色视屏 | 青草青草伊人精品视频 | 久久久久久久久人体 | ts人妖系列在线专区 | 日本黄色大片网站 | 欧美人禽杂交在线视频 | 6080窝窝理论 | 青草国产 | 香蕉免费一区二区三区 | 日韩在线资源 | 久久这里只有精品无码3D | 亚洲欧美色综合图小说 | 韩国三级做爰 | 奇米视频7777 | 亚洲高清影院 | 亚洲一二三区久久五月天婷婷 | 亚洲欧美另类在线观看 | 国产精品一区二区不卡的视频 | 日本三级斤| 不良网站在线观看 | 丝袜足控免费网站xx动漫漫画 | 无码AV免费精品一区二区三区 | 无限在线观看免费入口 | 国产亚洲精品美女久久久 | 好大好深好舒服 | 美女秘密网站 | www.大逼色 | 成人免费观看在线视频 | 大又大又黄又爽免费毛片 | 日本一区二区视频免费播放 | 国产自产在线 | 日韩欧美亚洲天堂 | 黑人巨大vs北条麻妃在线 | 欧美高清在线不卡免费观看 |