java實現(xiàn)Base64加密解密算法
Base64是網(wǎng)絡(luò)上最常見的用于傳輸8Bit字節(jié)代碼的編碼方式之一,大家可以查看RFC2045~RFC2049,上面有MIME的詳細規(guī)范。Base64編碼可用于在HTTP環(huán)境下傳遞較長的標識信息。例如,在Java Persistence系統(tǒng)Hibernate中,就采用了Base64來將一個較長的唯一標識符(一般為128-bit的UUID)編碼為一個字符串,用作HTTP表單和HTTP GET URL中的參數(shù)。在其他應(yīng)用程序中,也常常需要把二進制數(shù)據(jù)編碼為適合放在URL(包括隱藏表單域)中的形式。
此時,采用Base64編碼不僅比較簡短,同時也具有不可讀性,即所編碼的數(shù)據(jù)不會被人用肉眼所直接看到。
java的加密方式有很多中,現(xiàn)在給大家分享一個Base64加密的方式
package com.crypt; import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; /** * BASE64加密解密 * @author YUANWEi */ public class BASE64 { /** * BASE64解密 * * @param key * @return * @throws Exception */ public static byte[] decryptBASE64(String key) throws Exception { return (new BASE64Decoder()).decodeBuffer(key); } /** * BASE64加密 * * @param key * @return * @throws Exception */ public static String encryptBASE64(byte[] key) throws Exception { return (new BASE64Encoder()).encodeBuffer(key); } }
為什么要使用Base64加密呢?
Base64編碼的作用:由于某些系統(tǒng)中只能使用ASCII字符。Base64就是用來將非ASCII字符的數(shù)據(jù)轉(zhuǎn)換成ASCII字符的一種方法。它使用下面表中所使用的字符與編碼。
而且base64特別適合在http,mime協(xié)議下快速傳輸數(shù)據(jù)。
base64其實不是安全領(lǐng)域下的加密解密算法。雖然有時候經(jīng)??吹剿^的base64加密解密。其實base64只能算是一個編碼算法,對數(shù)據(jù)內(nèi)容進行編碼來適合傳輸。雖然base64編碼過后原文也變成不能看到的字符格式,但是這種方式很初級,很簡單。
Base64編碼方法要求把每三個8Bit的字節(jié)轉(zhuǎn)換為四個6Bit的字節(jié),其中,轉(zhuǎn)換之后的這四個字節(jié)中每6個有效bit為是有效數(shù)據(jù),空余的那兩個 bit用0補上成為一個字節(jié)。因此Base64所造成數(shù)據(jù)冗余不是很嚴重,Base64是當今比較流行的編碼方法,因為它編起來速度快而且簡單。
知識補充:
標準的Base64并不適合直接放在URL里傳輸,因為URL編碼器會把標準Base64中的“/”和“+”字符變?yōu)樾稳纭?XX”的形式,而這些“%”號在存入數(shù)據(jù)庫時還需要再進行轉(zhuǎn)換,因為ANSI SQL中已將“%”號用作通配符。
為解決此問題,可采用一種用于URL的改進Base64編碼,它不在末尾填充'='號,并將標準Base64中的“+”和“/”分別改成了“*”和“-”,這樣就免去了在URL編解碼和數(shù)據(jù)庫存儲時所要作的轉(zhuǎn)換,避免了編碼信息長度在此過程中的增加,并統(tǒng)一了數(shù)據(jù)庫、表單等處對象標識符的格式。
另有一種用于正則表達式的改進Base64變種,它將“+”和“/”改成了“!”和“-”,因為“+”,“*”以及前面在IRCu中用到的“[”和“]”在正則表達式中都可能具有特殊含義。
此外還有一些變種,它們將“+/”改為“_-”或“._”(用作編程語言中的標識符名稱)或“.-”(用于XML中的Nmtoken)甚至“_:”(用于XML中的Name)。
Base64要求把每三個8Bit的字節(jié)轉(zhuǎn)換為四個6Bit的字節(jié)(3*8 = 4*6 = 24),然后把6Bit再添兩位高位0,組成四個8Bit的字節(jié),也就是說,轉(zhuǎn)換后的字符串理論上將要比原來的長1/3。
以上就是關(guān)于Base64、Base64加密解密算法的全部內(nèi)容,希望對大家進行加密解密的學習有所幫助。
相關(guān)文章
Mybatis 入門之MyBatis環(huán)境搭建(第一篇)
Mybatis的前身叫iBatis,本是apache的一個開源項目, 2010年這個項目由apache software foundation 遷移到了google code,并且改名為MyBatis。這篇文章主要介紹了Mybatis入門第一篇之MyBaits環(huán)境搭建,需要的朋友參考下2016-12-12使用Java對數(shù)據(jù)庫進行基本的查詢和更新操作
這篇文章主要介紹了使用Java對數(shù)據(jù)庫進行基本的查詢和更新操作,是Java入門學習中的基礎(chǔ)知識,需要的朋友可以參考下2015-10-10幾句話說清session,cookie和token的區(qū)別及說明
這篇文章主要介紹了幾句話說清session,cookie和token的區(qū)別及說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-12-12