BASE64編碼算法不算是真正的加密算法。
MD5、SHA、HMAC這三種加密算法,可謂是非可逆加密,就是不可解密的加密方法,咱們稱之爲單向加密算法。咱們一般只把他們做爲加密的基礎。單純的以上三種的加密並不可靠。
BASE64
按照RFC2045的定義,Base64被定義爲:Base64內容傳送編碼被設計用來把任意序列的8位字節描述爲一種不易被人直接識別的形式。(The Base64 Content-Transfer-Encoding is designed to represent arbitrary sequences of octets in a form that need not be humanly readable.)
常見於郵件、http加密,截取http信息,你就會發現登陸操做的用戶名、密碼字段經過BASE64加密的。
經過java代碼實現以下:
java
主要就是BASE64Encoder、BASE64Decoder兩個類,咱們只須要知道使用對應的方法便可。另,BASE加密後產生的字節位數是8的倍數,若是不夠位數以=符號填充。
MD5
MD5 -- message-digest algorithm 5 (信息-摘要算法)縮寫,普遍用於加密和解密技術,經常使用於文件校驗。校驗?無論文件多大,通過MD5後都能生成惟一的MD5值。比如如今的ISO校驗,都是MD5校驗。怎麼用?固然是把ISO通過MD5後產生MD5的值。通常下載linux-ISO的朋友都見過下載連接旁邊放着MD5的串。就是用來驗證文件是否一致的。
經過java代碼實現以下:
linux
一般咱們不直接使用上述MD5加密。一般將MD5產生的字節數組交給BASE64再加密一把,獲得相應的字符串。
SHA
SHA(Secure Hash Algorithm,安全散列算法),數字簽名等密碼學應用中重要的工具,被普遍地應用於電子商務等信息安全領域。雖然,SHA與MD5經過碰撞法都被破解了, 可是SHA仍然是公認的安全加密算法,較之MD5更爲安全。
經過java代碼實現以下:
算法
HMAC
HMAC(Hash Message Authentication Code,散列消息鑑別碼,基於密鑰的Hash算法的認證協議。消息鑑別碼實現鑑別的原理是,用公開函數和密鑰產生一個固定長度的值做爲認證標識,用這個標識鑑別消息的完整性。使用一個密鑰生成一個固定大小的小數據塊,即MAC,並將其加入到消息中,而後傳輸。接收方利用與發送方共享的密鑰進行鑑別認證等。
經過java代碼實現以下:
數組
給出一個完整類,以下:
安全
再給出一個測試類:
函數
控制檯輸出:
工具
BASE64的加密解密是雙向的,能夠求反解。
MD五、SHA以及HMAC是單向加密,任何數據加密後只會產生惟一的一個加密串,一般用來校驗數據在傳輸過程當中是否被修改。其中HMAC算法有一個密鑰,加強了數據傳輸過程當中的安全性,強化了算法外的不可控因素。
單向加密的用途主要是爲了校驗數據在傳輸過程當中是否被修改。測試