Base64编码 - Java加密与安全
生活随笔
收集整理的這篇文章主要介紹了
Base64编码 - Java加密与安全
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
BASE64編碼什么是Base64編碼?它是一種把二進制的數據用文本表示的編碼算法.String base64Encoder(byte[] data)byte[]{0xe4,0xb8,0xad} -> "5Lit"0xe4,0xb8,0xad通過base64編碼,表示出來的字符串,就是"5Lit"我們看一下如何使用Base進行編碼,假如我們把中用UTF8表示的字節表示出來,他正好是三個字節,0xe4,0xb8,0xad,utf8bytes("中") = {0xe4,0xb8,0xad};我們緊接著把這是三個字節一共是24位,按照每6位分組,分成4個字節,這4個字節對應的16進制,正好是39,0b,22,2d,然后我們通過查表,就可以查到39對應的是5,0b對應的字母是大寫L,22對應的字母是i,2d對應的字母是t,所以最終編碼出來的字符串,是5Lit
Base64編碼表是從索引0一直到索引63,0對應的編碼是A,1對應的編碼是B,依次類推
那么使用Base64編碼的目的是什么呢?1. 它是一種使用文本表示二進制內容的方式2. 它適用于文本協議3. 但是他的效率會下降例如電子郵件協議,他就是一個文本協議,如果我們要在電子郵件中添加一個二進制的文件,我們就可以用base64編碼,然后以文本的形式傳送,他的缺點是傳輸的效率會降低,因為二進制經過base64編碼,長度會增加三分之一,如果長度不是3的整數倍,那么我們就需要在末尾補充一個0x00字節,或者是兩個0x00字節,編碼后我們加上一個等號就補充了一個字節,加上兩個等號就是補充了兩個字節,這樣寫法的時候我們就可以去掉
package com.learn.securl;import java.util.Base64;/*** 我們看一下如何使用Base64編碼* @author Leon.Sun**/
public class SecBase64Demo {public static void main(String[] args) throws Exception {String original = "Hello\u00ff編碼測試";/*** 首先我們通過getBytes把一個字符串轉換為一個字節數組* 然后我們通過Base64.getEncoder.encodeToString把一個字節數組表示為一個字符串表示的Base64* * 在JAVA中使用Base64編碼的時候,* 我們還可以使用withoutPadding,* 這樣我們就可以把末尾的等號去掉* SGVsbG/Dv+e8lueggea1i+ivlQ* 可以看到末尾的等號已經沒有了* 實際上有沒有等號對于解碼來說是沒有影響的* */// String b64 = Base64.getEncoder().encodeToString(original.getBytes("UTF-8"));// String b64 = Base64.getEncoder().withoutPadding().encodeToString(original.getBytes("UTF-8"));/*** 這樣我們就可以實現Base64的URL編碼,* SGVsbG_Dv-e8lueggea1i-ivlQ* 在java中base64的url編碼* 它會把加號變成減號,把斜杠變成下劃線* 這樣我們在傳遞URL參數的時候,* 就不會引起沖突* */String b64 = Base64.getUrlEncoder().withoutPadding().encodeToString(original.getBytes("UTF-8"));/*** 我們打印一下base64編碼* * SGVsbG/Dv+e8lueggea1i+ivlQ==* 第一行就是通過base64編碼編碼出的字符串* 最后兩個等號就是我們添加的兩個字節*/System.out.println(b64);/*** 如果我們要解碼base64,* 我們用Base64.getDecoder().decode就可以還原出原始的byte數組,* 然后我們通過new String傳入UTF-8,* 把這個byte數組還原成String*/// String ori = new String(Base64.getDecoder().decode(b64), "UTF-8");String ori = new String(Base64.getUrlDecoder().decode(b64), "UTF-8");System.out.println(ori);}
}
最后我們總結一下:1. Base64編碼它是一種編碼算法,不是一種加密算法2. Base64編碼的目的是把任意二進制數據編碼為文本,他的代價是長度增加了三分之一3. 還有一些類似于Base64的編碼,例如Base32,Base48,Base58等
?
總結
以上是生活随笔為你收集整理的Base64编码 - Java加密与安全的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: URL编码 - Java加密与安全
- 下一篇: MD5 - Java加密与安全