加密解密,曾經是我一個畢業(yè)設計的重要組件烟馅。在工作了多年以后回想當時那個加密说庭、解密算法,實在是太單純了郑趁。
言歸正傳刊驴,這里我們主要描述Java已經實現的一些加密解密算法,最后介紹數字證書。
如基本的單向加密算法:
BASE64 嚴格地說捆憎,屬于編碼格式舅柜,而非加密算法
MD5(Message Digest algorithm 5,信息摘要算法)
SHA(Secure Hash Algorithm躲惰,安全散列算法)
HMAC(Hash Message Authentication Code致份,散列消息鑒別碼)
復雜的對稱加密(DES、PBE)础拨、非對稱加密算法:
DES(Data Encryption Standard知举,數據加密算法)
PBE(Password-based encryption,基于密碼驗證)
RSA(算法的名字以發(fā)明者的名字命名:Ron Rivest, AdiShamir 和Leonard Adleman)
DH(Diffie-Hellman算法太伊,密鑰一致協(xié)議)
DSA(Digital Signature Algorithm,數字簽名)
ECC(Elliptic Curves Cryptography逛钻,橢圓曲線密碼編碼學)
本篇內容簡要介紹
BASE64僚焦、MD5、SHA曙痘、HMAC幾種方法芳悲。
MD5、SHA边坤、HMAC這三種加密算法名扛,可謂是非可逆加密,就是不可解密的加密方法茧痒。我們通常只把們作為加密的基礎肮韧。單純的以上三種的加密并不可靠。
BASE64
按照RFC2045的定義旺订,Base64被定義為:Base64內容傳送編碼被設計用來把任意序列的8位字節(jié)描述為一種不易被人直接識別的形式弄企。(The Base64 Content-Transfer-Encoding is designed to represent arbitrary sequences of octets in a form that need not be humanly readable.)
常見于郵件、http加密区拳,截取http信息拘领,你就會發(fā)現登錄操作的用戶名、密碼字段通過BASE64加密的樱调。
通過java代碼實現如下:
Java代碼
主要就是BASE64Encoder约素、BASE64Decoder兩個類,我們只需要知道使用對應的方法即可笆凌。另圣猎,BASE加密后產生的字節(jié)位數是8的倍數,如果不夠位數以=符號填充菩颖。
MD5
MD5 -- message-digest algorithm 5 (信息-摘要算法)縮寫样漆,廣泛用于加密和解密技術,常用于文件校驗晦闰。校驗放祟?不管文件多大鳍怨,經過MD5后都能生成唯一的MD5值。好比現在的ISO校驗跪妥,都是MD5校驗鞋喇。怎么用?當然是把ISO經過MD5后產生MD5的值眉撵。一般下載linux-ISO的朋友都見過下載鏈接旁邊放著MD5的串侦香。就是用來驗證文件是否一致的。
通過java代碼實現如下:
Java代碼
通常我們不直接使用上述MD5加密纽疟。通常將MD5產生的字節(jié)數組交給BASE64再加密一把罐韩,得到相應的字符串。
SHA
SHA(Secure Hash Algorithm污朽,安全散列算法)散吵,數字簽名等密碼學應用中重要的工具,被廣泛地應用于電子商務等信息安全領域蟆肆。雖然矾睦,SHA與MD5通過碰撞法都被破解了,
但是SHA仍然是公認的安全加密算法炎功,較之MD5更為安全枚冗。
通過java代碼實現如下:
Java代碼
HMAC
HMAC(Hash Message Authentication Code,散列消息鑒別碼蛇损,基于密鑰的Hash算法的認證協(xié)議赁温。消息鑒別碼實現鑒別的原理是,用公開函數和密鑰產生一個固定長度的值作為認證標識州藕,用這個標識鑒別消息的完整性束世。使用一個密鑰生成一個固定大小的小數據塊,即MAC床玻,并將其加入到消息中毁涉,然后傳輸。接收方利用與發(fā)送方共享的密鑰進行鑒別認證等锈死。
通過java代碼實現如下:
Java代碼
給出一個完整類贫堰,如下:
再給出一個測試類:
Java代碼
控制臺輸出:
Console代碼
注意
編譯時,可能會看到如下提示:
引用
BASE64Encoder和BASE64Decoder是非官方JDK實現類待牵。雖然可以在JDK里能找到并使用其屏,但是在API里查不到。JRE 中 sun 和 com.sun 開頭包的類都是未被文檔化的缨该,他們屬于 java, javax 類庫的基礎偎行,其中的實現大多數與底層平臺有關,一般來說是不推薦使用的。
BASE64的加密解密是雙向的蛤袒,可以求反解熄云。
MD5、SHA以及HMAC是單向加密妙真,任何數據加密后只會產生唯一的一個加密串缴允,通常用來校驗數據在傳輸過程中是否被修改。其中HMAC算法有一個密鑰珍德,增強了數據傳輸過程中的安全性练般,強化了算法外的不可控因素。
單向加密的用途主要是為了校驗數據在傳輸過程中是否被修改锈候。
相關鏈接: