資源描述:
《java加密技術(shù)》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、Java加密技術(shù)(一)文章分類:Java編程???加密解密,曾經(jīng)是我一個畢業(yè)設(shè)計(jì)的重要組件。在工作了多年以后回想當(dāng)時那個加密、解密算法,實(shí)在是太單純了。????言歸正傳,這里我們主要描述Java已經(jīng)實(shí)現(xiàn)的一些加密解密算法,最后介紹數(shù)字證書。????如基本的單向加密算法:?·BASE64嚴(yán)格地說,屬于編碼格式,而非加密算法·MD5(MessageDigestalgorithm5,信息摘要算法)·SHA(SecureHashAlgorithm,安全散列算法)·HMAC(HashMessageAuthenticat
2、ionCode,散列消息鑒別碼)???復(fù)雜的對稱加密(DES、PBE)、非對稱加密算法:?·DES(DataEncryptionStandard,數(shù)據(jù)加密算法)·PBE(Password-basedencryption,基于密碼驗(yàn)證)·RSA(算法的名字以發(fā)明者的名字命名:RonRivest,AdiShamir和LeonardAdleman)·DH(Diffie-Hellman算法,密鑰一致協(xié)議)·DSA(DigitalSignatureAlgorithm,數(shù)字簽名)·ECC(EllipticCurvesCr
3、yptography,橢圓曲線密碼編碼學(xué))???本篇內(nèi)容簡要介紹BASE64、MD5、SHA、HMAC幾種方法。?????MD5、SHA、HMAC這三種加密算法,可謂是非可逆加密,就是不可解密的加密方法。我們通常只把他們作為加密的基礎(chǔ)。單純的以上三種的加密并不可靠。?BASE64?按照RFC2045的定義,Base64被定義為:Base64內(nèi)容傳送編碼被設(shè)計(jì)用來把任意序列的8位字節(jié)描述為一種不易被人直接識別的形式。(TheBase64Content-Transfer-Encodingisdesignedtor
4、epresentarbitrarysequencesofoctetsinaformthatneednotbehumanlyreadable.)?常見于郵件、http加密,截取http信息,你就會發(fā)現(xiàn)登錄操作的用戶名、密碼字段通過BASE64加密的。??通過java代碼實(shí)現(xiàn)如下:?Java代碼??1./**?2.?*?BASE64解密?3.?*??4.?*?@param?key?5.?*?@return?6.?*?@throws?Exception?7.?*/??8.public?static?byte[]?d
5、ecryptBASE64(String?key)?throws?Exception?{??9.????return?(new?BASE64Decoder()).decodeBuffer(key);??10.}??11.??12./**?13.?*?BASE64加密?14.?*??15.?*?@param?key?16.?*?@return?17.?*?@throws?Exception?18.?*/??19.public?static?String?encryptBASE64(byte[]?key)?thro
6、ws?Exception?{??20.????return?(new?BASE64Encoder()).encodeBuffer(key);??21.}??主要就是BASE64Encoder、BASE64Decoder兩個類,我們只需要知道使用對應(yīng)的方法即可。另,BASE加密后產(chǎn)生的字節(jié)位數(shù)是8的倍數(shù),如果不夠位數(shù)以=符號填充。?MD5?MD5--message-digestalgorithm5(信息-摘要算法)縮寫,廣泛用于加密和解密技術(shù),常用于文件校驗(yàn)。校驗(yàn)?不管文件多大,經(jīng)過MD5后都能生成唯一的MD5
7、值。好比現(xiàn)在的ISO校驗(yàn),都是MD5校驗(yàn)。怎么用?當(dāng)然是把ISO經(jīng)過MD5后產(chǎn)生MD5的值。一般下載linux-ISO的朋友都見過下載鏈接旁邊放著MD5的串。就是用來驗(yàn)證文件是否一致的。??通過java代碼實(shí)現(xiàn)如下:?Java代碼??1./**?2.?*?MD5加密?3.?*??4.?*?@param?data?5.?*?@return?6.?*?@throws?Exception?7.?*/??8.public?static?byte[]?encryptMD5(byte[]?data)?throws?Exc
8、eption?{??9.??10.????MessageDigest?md5?=?MessageDigest.getInstance(KEY_MD5);??11.????md5.update(data);??12.??1.????return?md5.digest();??2.??3.}??通常我們不直接使用上述MD5加密。通常將MD5產(chǎn)生的字節(jié)數(shù)組交給BASE64再加密一把,得到相應(yīng)的字符串。?S