1. 程式人生 > >java:7種Base64編碼和解碼功能詳解和效能比較

java:7種Base64編碼和解碼功能詳解和效能比較

BASE64 編碼是一種常用的字元編碼,在很多地方都會用到。但base64不是安全領域下的加密解密演算法。能起到安全作用的效果很差,而且很容易破解,他核心作用應該是傳輸資料的正確性,有些閘道器或系統只能使用ASCII字元。Base64就是用來將非ASCII字元的資料轉換成ASCII字元的一種方法,而且base64特別適合在http,mime協議下快速傳輸資料。

JDK裡面實現Base64的API

在JDK1.6之前,JDK核心類一直沒有Base64的實現類,有人建議用Sun/Oracle JDK裡面的sun.misc.BASE64Encoder 和 sun.misc.BASE64Decoder,使用它們的優點就是不需要依賴第三方類庫,缺點就是可能在未來版本會被刪除(用maven編譯會發出警告),而且效能不佳,後面會有效能測試。

JDK1.6中添加了另一個Base64的實現,javax.xml.bind.DatatypeConverter兩個靜態方法parseBase64Binary 和 printBase64Binary,隱藏在javax.xml.bind包下面,不被很多開發者知道。

在Java 8在java.util包下面實現了BASE64編解碼API,而且效能不俗,API也簡單易懂,下面展示下這個類的使用例子。

java.util.Base64

該類提供了一套靜態方法獲取下面三種BASE64編解碼器:

1)Basic編碼:是標準的BASE64編碼,用於處理常規的需求

1 2 3 4 5 6 // 編碼 String asB64 = Base64.getEncoder().encodeToString("some string".getBytes("utf-8")); System.out.println(asB64); // 輸出為: c29tZSBzdHJpbmc= // 解碼 byte[] asBytes = Base64.getDecoder().decode("c29tZSBzdHJpbmc="); System.out.println(new String(asBytes, "utf-8")); // 輸出為: some string

2)URL編碼:使用下劃線替換URL裡面的反斜線“/”

1 2 3 4 String urlEncoded = Base64.getUrlEncoder().encodeToString("subjects?abcd".getBytes("utf-8")); System.out.println("Using URL Alphabet: " + urlEncoded); // 輸出為: Using URL Alphabet: c3ViamVjdHM_YWJjZA==

3)MIME編碼:使用基本的字母數字產生BASE64輸出,而且對MIME格式友好:每一行輸出不超過76個字元,而且每行以“\r\n”符結束。

1 2 3 4 5 6 7 StringBuilder sb = new StringBuilder(); for (int t = 0; t < 10; ++t) { sb.append(UUID.randomUUID().toString()); } byte[] toEncode = sb.toString().getBytes("utf-8"); String mimeEncoded = Base64.getMimeEncoder().encodeToString(toEncode); System.out.println(mimeEncoded);

第三方實現Base64的API

首先便是常用的Apache Commons Codec library裡面的org.apache.commons.codec.binary.Base64;

第二個便是Google Guava庫裡面的com.google.common.io.BaseEncoding.base64() 這個靜態方法;

第三個是net.iharder.Base64,這個jar包就一個類;

最後一個,號稱Base64編碼速度最快的MigBase64,而且是10年前的實現,到現在是否能保持這個稱號,測一測便知道;

Base64編碼效能測試

上面講了一共7種實現Base64編碼,Jdk裡面3種,第三方實現4種,一旦有選擇,則有必要將他們進行一次高低對比,效能測試是最直接的方式

首先來定義兩個介面

1 2

相關推薦

java7Base64編碼解碼功能效能比較

BASE64 編碼是一種常用的字元編碼,在很多地方都會用到。但base64不是安全領域下的加密解密演算法。能起到安全作用的效果很差,而且很容易破解,他核心作用應該是傳輸資料的正確性,有些閘道器或系統只能使用ASCII字元。Base64就是用來將非ASCII字元的資料轉換成ASCII字元的一種方法,而且

java中四訪問修飾符區別及全過程

HP dnv ax1 pci gda fmm utc dos rdp 客戶端程序員:即在其應用中使用數據類型的類消費者,他的目標是收集各種用來實現快速應用開發的類。   類創建者:即創建新數據類型的程序員,目標是構建類。     訪問控制存在的原因:a、讓客戶端程序員無法觸

Android關於FTP檔案上傳下載功能

Android關於FTP檔案上傳和下載功能詳解  更新時間:2017年09月21日 11:41:14   作者:一諾的祕密花園    我要評論 這篇文章主要為大家詳細介紹了Android關於FTP檔案上傳和下載功能,具有一定的參考價值,感興趣

Java 中如何進行 BASE64 編碼解碼

解碼 clas nal upd getch 根據 數組 格式 並且 BASE64 編碼是一種常用的字符編碼,在很多地方都會用到。JDK 中提供了非常方便的 BASE64Encoder 和 BASE64Decoder,用它們可以非常方便的完成基於 BASE64 的編碼和解碼。

【H.264/AVC視訊編解碼技術】二十二、熵編碼(7)語法元素的CABAC解析

《H.264/AVC視訊編解碼技術詳解》視訊教程已經在“CSDN學院”上線,視訊中詳述了H.264的背景、標準協議和實現,並通過一個實戰工程的形式對H.264的標準進行解析和實現,歡迎觀看! “紙上得來終覺淺,絕知此事要躬行”,只有自己按照標準文件以程式碼的形式操作一遍,才能對視訊壓

【H.264/AVC視訊編解碼技術】十五、H.264的變換編碼(二)H.264整數變換量化的實現

《H.264/AVC視訊編解碼技術詳解》視訊教程已經在“CSDN學院”上線,視訊中詳述了H.264的背景、標準協議和實現,並通過一個實戰工程的形式對H.264的標準進行解析和實現,歡迎觀看! “紙上得來終覺淺,絕知此事要躬行”,只有自己按照標準文件以程式碼

python 字元編碼解碼——unicode、str中文UnicodeDecodeError: 'ascii' codec can't decode

摘要:在進行python指令碼的編寫時,如果我們用python來處理網頁資料或者進行與中文字元有關的處理工作,經常出現這樣的出錯資訊:SyntaxError: Non-ASCII character '\xe6' in file ./filename.py on line

java加密基礎(一) —— BASE64編碼

test 分享 非對稱 學習 int ava 學習過程 public encode   工作之後第一次接觸到java加密機制,當時需求是使用RSA做數字簽名。當時看到之後一臉懵逼,就查了各種資料。   對於學習過程中我走了不少彎路,主要是因為不知道先看什麽在看什麽。下面說一

java 圖片文件Base64編碼與二進制編碼格式互相轉換

jre public log 編碼 lose img csdn rac body 1 public static byte[] base64String2ByteFun(String base64Str){ 2 BASE64Decoder

java集合的區別及適用場景

後臺開發工作中經常遇到一些使用集合的場景,幾種集合的優缺點又老是記不住,所以寫了這篇部落格。 首先大的集合分為:List,Set,Map三種,其中List與Set是繼承自Collection,而Map不是。 List與Set的區別:List中的元素有存放順序,並且可以存放重複元素,檢索效率高

python將圖片進行base64編碼解碼

一、將圖片進行base64編碼 import base64 img_path = 'D:xxx/file/img/juwan.jpg' with open(img_path, 'rb') as f: image_data = f.read() base64_data

微會動微信現場互動7小程式給公眾號導流的方法

微信生態下,公眾號、小程式、社群、個人號是運營同學必不可缺的運營工具,但彼此之間如何引流呢?公眾號給小程式導流容易,小程式做裂變也比公眾號容易,但小程式的使用者流失快,怎麼通過公眾號實現粉絲留存呢? 關於小程式給公眾號導流的方法,我一口氣找了7個。 1.抽獎活動,關注公眾號領獎 活動流程如下:進入小

微會動微信現場互動7小程序給公眾號導流的方法

支付 vpd mar 增加 ces water img log 公眾 微信生態下,公眾號、小程序、社群、個人號是運營同學必不可缺的運營工具,但彼此之間如何引流呢?公眾號給小程序導流容易,小程序做裂變也比公眾號容易,但小程序的用戶流失快,怎麽通過公眾號實現粉絲留存呢? 關於小

各種音視訊編解碼學習之 編解碼學習筆記(三)Mpeg系列——Mpeg 1Mpeg 2

    最近在研究音視訊編解碼這一塊兒,看到@bitbit大神寫的【各種音視訊編解碼學習詳解】這篇文章,非常感謝,佩服的五體投地。奈何大神這邊文章太長,在這裡我把它分解很多小的篇幅,方便閱讀。大神部落格傳送門:https://www.cnblogs.com/skyofbitbit

base64編碼解碼

encode(input) { //編碼方法 var _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";

用python實現base64編碼解碼

用到了python裡的base64模組 用法: 編碼: 1 import base64 2 a = 'HC'.decode() #將‘HC’轉為二進位制 3 b = base64.b64encode(a) #將a轉為base64編碼 4 b.decode() #從二進位制轉回 5 6 base6

【H.264/AVC視訊編解碼技術】二十三、幀間預測編碼(1)幀間預測編碼的基本原理

《H.264/AVC視訊編解碼技術詳解》視訊教程已經在“CSDN學院”上線,視訊中詳述了H.264的背景、標準協議和實現,並通過一個實戰工程的形式對H.264的標準進行解析和實現,歡迎觀看! “紙上得來終覺淺,絕知此事要躬行”,只有自己按照標準文件以程式碼的形式操作一遍,才能對視訊壓

java處理圖片與base64編碼互相轉換

最近做專案遇到,需要在signature簽名元素中添加簽名的base64編碼,網上找了js處理,出結果了,但編碼不正確。之後用java程式碼處理(與線上轉換http://imgbase64.duoshitong.com/結果一樣),直接上程式碼,如下: package ydysz.too

【H.264/AVC視訊編解碼技術】十三、熵編碼演算法(4)H.264使用CAVLC解析巨集塊的殘差資料

《H.264/AVC視訊編解碼技術詳解》視訊教程已經在“CSDN學院”上線,視訊中詳述了H.264的背景、標準協議和實現,並通過一個實戰工程的形式對H.264的標準進行解析和實現,歡迎觀看! “紙上得來終覺淺,絕知此事要躬行”,只有自己按照標準文件以程式碼

java中加密演算法Base64RSAAndroid

手機的安全重要資訊容易被洩露的方式: 1.會從我們本地洩露     手機中毒等 2.會從伺服器洩露  伺服器人員將資訊賣出去等 3.半路上,網路傳輸的過程中 加密傳輸資料    手機連線WiFi,如果在WiFi上設定監聽資料,將關鍵的資訊攔截下來,就有可能盜取個人重要資訊