通常把加密方法分為以下幾類(lèi)
1.單向加密算法 顧名思義,這種算法只能加密,不能解密,是不可逆的,所以叫做單向加密算法。這些算法又稱(chēng)摘要算法,就類(lèi)似給一篇短文做一個(gè)提綱一樣。相同的短文,做出來(lái)的提綱是相同的,因此,可以根據提綱來(lái)判斷是不是那個(gè)短文;又因為只有提綱,是無(wú)法知道原來(lái)的短文具體是怎么寫(xiě)的,所以又是不可逆的。
所以這種算法通常被用作對數據進(jìn)行簽名。
1.MD5(Message Digest algorithm 5,信息摘要算法)
2.SHA(Secure Hash Algorithm,安全散列算法)
3.HMAC(Hash Message Authentication Code,散列消息鑒別碼)
MD5、SHA、HMAC這三種加密算法,通常只把他們作為加密的基礎。單純的以上三種的加密并不可靠,通常與其他對稱(chēng)或非對稱(chēng)加密算法一起使用。 例如:
Signature dsa = Signature.getInstance("SHA1withRSA");
SHA1withRSA就是說(shuō)明這是通過(guò)SHA1算法簽名并通過(guò)RSA算法加密之后得到簽名(也叫文件摘要)的方式。
還有一種算法經(jīng)常在加解密時(shí)使用, BASE64算法,BASE64嚴格地說(shuō),屬于編碼格式,而非加密算法。這種算法用于把字節數組轉化成字符串,方便存儲和傳輸和閱讀。
2.對稱(chēng)加密算法
對稱(chēng)加密(也叫私鑰加密)指加密和解密使用相同密鑰的加密算法。有時(shí)又叫傳統密碼算法,就是加密密鑰和解密密鑰是相同的,或者加密/解密密鑰能夠從解密/加密密鑰中推算出來(lái),所以也稱(chēng)這種加密算法為秘密密鑰算法或單密鑰算法。
對稱(chēng)加密算法的特點(diǎn)是算法公開(kāi)、計算量小、加密速度快、加密效率高。
常見(jiàn)對稱(chēng)加密算法如下:
1.DES算法
2.3DES/edeDES/TDES算法
3.AES算法
4.Twofish算法
5.Blowfish算法
6.RC2算法
7.RC4算法
8.RC5算法
9.RC6算法
10.PBE算法
11.CAST算法
12.IDEA算法
3.非對稱(chēng)加密算法
非對稱(chēng)加密算法(asymmetric cryptographic algorithm)又名“公開(kāi)密鑰加密算法”。
非對稱(chēng)加密算法需要兩個(gè)密鑰:公開(kāi)密鑰(publickey)和私有密鑰(privatekey)。公開(kāi)密鑰與私有密鑰是一對,如果用公開(kāi)密鑰對數據進(jìn)行加密,只有用對應的私有密鑰才能解密;如果用私有密鑰對數據進(jìn)行加密,那么只有用對應的公開(kāi)密鑰才能解密。因為加密和解密使用的是兩個(gè)不同的密鑰,所以這種算法叫作非對稱(chēng)加密算法。非對稱(chēng)加密算法實(shí)現機密信息交換的基本過(guò)程是:甲方生成一對密鑰并將其中的一把作為公用密鑰向其它方公開(kāi);得到該公用密鑰的乙方使用該密鑰對機密信息進(jìn)行加密后再發(fā)送給甲方;甲方再用自己保存的另一把專(zhuān)用密鑰對加密后的信息進(jìn)行解密。另一方面,甲方可以使用自己的私密鑰對機密信息進(jìn)行加密后再發(fā)送給乙方;乙方再用甲方的公鑰對加密后的信息進(jìn)行解密。
非對稱(chēng)密碼體制的特點(diǎn):算法強度復雜、安全性依賴(lài)于算法與密鑰但是由于其算法復雜,而使得加密解密速度沒(méi)有對稱(chēng)加密解密的速度快。對稱(chēng)密碼體制中只有一種密鑰,并且是非公開(kāi)的,如果要解密就得讓對方知道密鑰。所以保證其安全性就是保證密鑰的安全,而非對稱(chēng)密鑰體制有兩種密鑰,其中一個(gè)是公開(kāi)的,這樣就可以不需要像對稱(chēng)密碼那樣傳輸對方的密鑰了。這樣安全性就大了很多。
常見(jiàn)非對稱(chēng)算法有如下幾種:
1.RSA算法
2.DH算法
3.DSA-Digital Signature Algorithm(數字簽名算法)
4.ECC-Elliptic Curves Cryptography(橢圓曲線(xiàn)密碼編碼學(xué))
加解密算法使用說(shuō)明(java語(yǔ)言)
一、BASE64編碼算法
BASE64算法類(lèi)似于URLEncoder/URLDecoder類(lèi)的算法,實(shí)際上是一種轉碼的算法,并不是加密算法。轉碼后,每76個(gè)字符加一個(gè)換行符。
BASE64的實(shí)現類(lèi)比較多,簡(jiǎn)單介紹2種。
1)JDK自帶實(shí)現類(lèi)
參見(jiàn)示例代碼Base64Test.java。
2)bouncy castle實(shí)現類(lèi)
參見(jiàn)示例代碼BCBase64Test.java。
二、單向加密算法
1.MD5
message digest algorithm 5 (信息摘要算法)縮寫(xiě),廣泛用于加密和解密技術(shù),常用于文件校驗。不管文件多大,經(jīng)過(guò)MD5后都能生成唯一的MD5值,這個(gè)值的長(cháng)度都是128位,即16個(gè)字節。
MD系列包括如下算法:
1.md2,摘要長(cháng)度128位,16個(gè)字節,已過(guò)時(shí)
2.md4,摘要長(cháng)度128位,16個(gè)字節,已過(guò)時(shí)
3.md5,摘要長(cháng)度128位,16個(gè)字節
此外,還有一種RIPEMD算法,是Hans Dobbertin等3人在md4,md5的基礎上,于1996年提出來(lái)的,顧名思義RIPEMD就是成熟md算法。算法共有4個(gè)標準128、160、256和320,其對應輸出長(cháng)度分別為16字節、20字節、32字節和40字節。不過(guò),讓人難以致信的是RIPEMD的設計者們根本就沒(méi)有真正設計256和320位這2種標準,他們只是在128位和160位的基礎上,修改了部分參數來(lái)達到輸出為256和320位的目的。所以,256位的強度和128相當,而320位的強度和160位相當。
RIPEMD系列算法如下
1.ripemd128,摘要長(cháng)度128位,16個(gè)字節
2.ripemd160,摘要長(cháng)度160位,20個(gè)字節
3.ripemd256,相當于ripemd128算法
4.ripemd320,相當于ripemd160算法
摘要長(cháng)度越長(cháng),破解難度也就越大,安全性也就越高。
應用代碼參見(jiàn)示例Md5Test.java
2.SHA
SHA(Secure Hash Algorithm,安全散列算法),數字簽名等密碼學(xué)應用中重要的工具,被廣泛地應用于電子商務(wù)等信息安全領(lǐng)域。雖然,SHA與MD5通過(guò)碰撞法都被破解了,但是SHA仍然是公認的安全加密算法,較之MD5更為安全。SHA系列算法要求輸入消息的長(cháng)度不超過(guò)264位,1G=230位,最大長(cháng)度為234G,實(shí)際應用中不會(huì )出現超過(guò)最大限制的數據,可以不考慮消息長(cháng)度的問(wèn)題。
SHA系列算法包括如下幾種:
1.SHA1/SHA,摘要長(cháng)度160位,20個(gè)字節
2.SHA256,摘要長(cháng)度256位,32個(gè)字節
3.SHA384,摘要長(cháng)度384位,48個(gè)字節
4.SHA512,摘要長(cháng)度512位,64個(gè)字節
摘要長(cháng)度越長(cháng),破解難度也就越大,安全性也就越高。
應用代碼參見(jiàn)示例ShaTest.java。
3.HMAC HMAC(Hash Message Authentication Code),散列消息鑒別碼,基于密鑰的Hash算法的認證協(xié)議,也叫MAC算法。消息鑒別碼實(shí)現鑒別的原理是,用公開(kāi)函數和密鑰產(chǎn)生一個(gè)固定長(cháng)度的值作為認證標識,用這個(gè)標識鑒別消息的完整性。使用一個(gè)密鑰生成一個(gè)固定大小的小數據塊,即摘要,并將其加入到消息中,然后傳輸。接收方利用與發(fā)送方共享的密鑰及摘要進(jìn)行鑒別認證等。
應用代碼參見(jiàn)示例HmacTest.java。
三、對稱(chēng)加密算法
1.DES DES-Data Encryption Standard,即數據加密算法。是IBM公司于1975年研究成功并公開(kāi)發(fā)表的。DES算法的入口參數有三個(gè):Key、Data、Mode。其中Key為8個(gè)字節共64位,是DES算法的工作密鑰;Data也為8個(gè)字節64位,是要被加密或被解密的數據;Mode為DES的工作方式,有兩種:加密或解密。? DES算法把64位的明文輸入塊變?yōu)?4位的密文輸出塊,它所使用的密鑰也是64位。
應用代碼參見(jiàn)示例DesSingleTest.java。
2.3DES
3DES(即Triple DES)是DES向AES過(guò)渡的加密算法,它使用3條56位的密鑰對數據進(jìn)行三次加密。是DES的一個(gè)更安全的變形。它以DES為基本模塊,通過(guò)組合分組方法設計出分組加密算法。比起最初的DES,3DES更為安全。
之所以稱(chēng)為3DES,是因為該算法加解密時(shí)使用3個(gè)密鑰k1,k2,k3,操作過(guò)程如下:
加密過(guò)程:加密(使用k1)-解密(使用k2)-加密(使用k3)
解密過(guò)程:解密(使用k3)-加密(使用k2)-解密(使用k1)
加密/解密均操作了3次,相當于進(jìn)行了3次DES加密/解密,所以叫做3DES,當然其需要的運算時(shí)間要比DES算法多。
實(shí)際使用時(shí),密鑰長(cháng)度需要為24個(gè)字節,這24個(gè)字節會(huì )被分為3個(gè)8字節段,k1,k2,k3均從8字節段中取56位得出。
應用代碼參見(jiàn)示例DesedeTest.java。
3.AES
AES是美國國家標準技術(shù)研究所NIST旨在取代DES的21世紀的加密標準。AES是一個(gè)標準,并不是具體的加密算法。
AES標準的基本要求是,采用對稱(chēng)分組密碼體制,密鑰長(cháng)度的最少支持為128、192、256,分組長(cháng)度128位,算法應易于各種硬件和軟件實(shí)現。1998年NIST開(kāi)始AES第一輪分析、測試和征集,共產(chǎn)生了15個(gè)候選算法。1999年3月完成了第二輪AES2的分析、測試。2000年10月2日美國政府正式宣布選中比利時(shí)密碼學(xué)家Joan Daemen 和 Vincent Rijmen 提出的一種密碼算法RIJNDAEL 作為AES的標準算法,也叫RIJNDAEL算法。該算法支持密鑰長(cháng)度為128位。
應用代碼參見(jiàn)示例AesTest.java。
4.Twofish
Twofish?則是counterpane?公司向NIST提交的一種滿(mǎn)足AES要求的加密算法。Twofish采用128位數據塊(128?bits?block),128-192-256-bit?可變長(cháng)度密鑰。這中算法比DES和RIJNDAEL算法速度更快,靈活性更高。
應用代碼參見(jiàn)示例TwoFishTest.java。
5.Blowfish
Blowfish是1993年布魯斯·施奈爾(Bruce Schneier)開(kāi)發(fā)的對稱(chēng)密鑰區塊加密算法,區塊長(cháng)為64位,密鑰為1至448位的可變長(cháng)度。與DES等算法相比,其處理速度較快。因為其無(wú)須授權即可使用,作為一種自由授權的加密方式在SSH、文件加密軟件等被廣泛地使用。
blowfish算法的密鑰位長(cháng)度位數必須為8的整數倍。
應用代碼參見(jiàn)示例BlowFishTest.java。
6.RC2
RC2是由著(zhù)名密碼學(xué)家Ron Rivest設計的一種傳統對稱(chēng)分組加密算法,它可作為DES算法的建議替代算法。它的輸入和輸出都是64比特。密鑰的長(cháng)度是從1字節到128字節可變。
應用代碼參見(jiàn)示例RC2Test.java、RC2JavaTest.java。
7.RC4
RC4算法是一種在電子信息領(lǐng)域加密的技術(shù)手段,用于無(wú)線(xiàn)通信網(wǎng)絡(luò )。RC4加密算法是大名鼎鼎的RSA三人組中的頭號人物Ron Rivest在1987年設計的密鑰長(cháng)度可變的流加密算法。該算法的速度可以達到DES加密的10倍左右。密鑰長(cháng)度1-256字節。
RC4廣泛應用在安全套接字層(SSL)(用來(lái)保護網(wǎng)絡(luò )上傳輸的數據)和WEP(無(wú)線(xiàn)網(wǎng)絡(luò )數據保護)上。以色列魏茨曼研究所和美國思科公司的研究者發(fā)現,在使用“有線(xiàn)等效保密規則”(WEP)的無(wú)線(xiàn)網(wǎng)絡(luò )中,在特定情況下,人們可以逆轉RC4算法的加密過(guò)程,獲取密鑰,從而將己加密的信息解密。實(shí)現這一過(guò)程并不復雜,只需要使用一臺個(gè)人電腦對加密的數據進(jìn)行分析,經(jīng)過(guò)幾個(gè)小時(shí)的時(shí)間就可以破譯出信息的全部?jì)热?。所以在設置無(wú)線(xiàn)網(wǎng)的密碼加密方式時(shí)最好選擇WPA加密方式,提高安全性。
應用代碼參見(jiàn)示例RC4Test.java。
8.RC5
RC5分組密碼算法是1994由麻薩諸塞技術(shù)研究所的Ronald L. Rivest教授發(fā)明的,并由RSA實(shí)驗室分析。是一種非??焖偾液?jiǎn)單的算法,由塊尺寸、運算輪數和密鑰長(cháng)度參數化,這些參數能被調整,以滿(mǎn)足不同的安全需求。Bouncy Castle加密包提供塊長(cháng)度為32和642種方式。
塊長(cháng)度:常用16,32,64位;運算輪數有效值:1-255;密鑰字節長(cháng)度有效值:1-255。
應用代碼參見(jiàn)示例RC5Test.java、RC5JavaTest.java。
9.RC6
RC6算法是在RC5算法的基礎上設計的,也是由麻薩諸塞技術(shù)研究所的Ronald L. Rivest教授設計,是根據AES標準在RC5算法的基礎上實(shí)現的。因此,RC6也可以指定和RC5一樣的塊長(cháng)度,運算輪數,密鑰字節長(cháng)度。
有實(shí)驗表明:
①從程序的執行效率來(lái)看,無(wú)論在加密還是在解密過(guò)程中,RC5算法都要比RC6算法執行效率高。因此,在一些非常注重程序執行效率,而對數據安全性要求不是非常高的情況下,應該采用RC5算法。
②從程序的執行時(shí)間來(lái)看,無(wú)論在加密過(guò)程還是在解密過(guò)程中,RC5算法都要比RC6算法省時(shí)。因此,在一些對程序執行時(shí)間長(cháng)短要求很高,對數據安全性要求不是非常高的情況下,可以采用RC5算法。
③從程序的大小來(lái)看,無(wú)論在加密過(guò)程中還是在解密過(guò)程中,RC5算法都要比RC6算法更簡(jiǎn)潔。因此,在一些對程序所用空間大小要求很高,對數據安全性要求不是非常高的情況下,可以采用RC5算法。
④從安全性角度考慮,RC6算法是在RC5算法基礎之上針對RC5算法中的漏洞,主要是循環(huán)移位的位移量并不取決于要移動(dòng)次數的所有比特,通過(guò)采用引入乘法運算來(lái)決定循環(huán)移位次數的方法,對RC5算法進(jìn)行了改進(jìn),從而大大提高了RC6算法的安全性。因此,在一些對數據安全性要求很高的情況下,應該采用RC6算法。
應用代碼參見(jiàn)示例RC6Test.java。
10.PBE
? PBE—Password-based encryption(基于密碼加密)。其特點(diǎn)在于口令由用戶(hù)自己掌管,不借助任何物理媒體;由用戶(hù)提供初始密碼和初始鹽(也可以看做是第二個(gè)密碼),采用單向加密和對稱(chēng)加密算法混合加密,是一種簡(jiǎn)便、安全的加密方式。需要注意的是,鹽只能是64位,8個(gè)字節,不能多于或者少于64位。密碼長(cháng)度不限。
應用代碼參見(jiàn)示例PBETest.java。
11.CAST
CAST算法是由加拿大的Carlisle Adams(Entrust Technologies)和Stafford Tavares共同設計的。盡管CAST常常被看作算法,實(shí)際上它是用于構造算法的設計過(guò)程。
CAST設計過(guò)程的細節已經(jīng)向密碼學(xué)界公布了,專(zhuān)家們可以評論和分析它,并且必須承受全部密碼分析的嘗試。各種各樣的研究表明CAST比DES具有更強的抗攻擊能力,而且在加密和解密上要更快一些。CAST算法比典型的DES算法大約快5-6倍。
CAST算法是分組算法,它使用64位分組作為輸入。CAST算法的設計允許可變的密鑰長(cháng)度,變化范圍在40-256位?!癈AST算法”使用的迭代輪數由設計者決定。報告已經(jīng)顯示一個(gè)僅僅使用8輪迭代的“CAST算法”比DES(使用16輪迭代)具有稍強一些的抗攻擊能力。CAST算法已經(jīng)被美國和加拿大政府接受作為代替DES的候選算法之一。
Bouncy Castle實(shí)現支持2種方式:
1)Cast5,64位分組,密鑰長(cháng)度1-128位,應用代碼參見(jiàn)示例CAST5Test.java。
2)Cast6,128位分組,密鑰長(cháng)度1-256位,應用代碼參見(jiàn)示例CAST6Test.java。
12.IDEA
IDEA(International Data Encryption Algorithm)是瑞士的James Massey,Xuejia Lai等人提出的加密算法,在密碼學(xué)中屬于數據塊加密算法(Block Cipher)類(lèi)。IDEA使用長(cháng)度為128bit的密鑰,數據塊大小為64bit。從理論上講,IDEA屬于“強”加密算法,至今還沒(méi)有出現對該算法的有效攻擊算法。早在1990年,Xuejia Lai等人在EuroCrypt’90年會(huì )上提出了分組密碼建議PES(Proposed Encryption Standard)。在EuroCrypt’91年會(huì )上, Xuejia Lai等人又提出了PES的修正版IPES(Improved PES)。目前IPES已經(jīng)商品化,并改名為IDEA。IDEA已由瑞士的Ascom公司注冊專(zhuān)利,以商業(yè)目的使用IDEA算法必須向該公司申請許可。
應用代碼參見(jiàn)示例IDEATest.java。
四、非對稱(chēng)加密算法
1. RSA 這種算法1978年就出現了,它是第一個(gè)既能用于數據加密也能用于數字簽名的算法。它易于理解和操作,也很流行。算法的名字以發(fā)明者的名字命名:Ron Rivest, Adi Shamir 和Leonard Adleman。
這種加密算法的特點(diǎn)主要是密鑰的變化,上文我們看到DES只有一個(gè)密鑰。相當于只有一把鑰匙,如果這把鑰匙丟了,數據也就不安全了。RSA同時(shí)有兩把鑰匙,公鑰與私鑰。同時(shí)支持數字簽名。數字簽名的意義在于,對傳輸過(guò)來(lái)的數據進(jìn)行校驗。確保數據在傳輸工程中不被修改。
數字簽名在實(shí)際應用中需要數字證書(shū),簡(jiǎn)單介紹下Java中數字證書(shū)的生成方法。
1).jdk安裝路徑下有一個(gè)keytool的工具程序,這個(gè)工具就是用來(lái)生成數字證書(shū)的。
2).生成私鑰文件
使用命令行,切換目錄到keytool所在的文件夾,執行下面的命令
keytool -genkey -validity 36000 -alias rsatest -keyalg RSA -keysize 1024 -storetype jks -keypass 123456 -storepass 123456 -keystore d:\log\test.jks
其中
-genkey表示生成密鑰
-validity指定證書(shū)有效期,這里是36000天
-alias指定別名,這里是rsatest
-keyalg指定算法,這里是RSA
-keysize 指定生成的密鑰長(cháng)度,這里是1024
-storetype 指定私鑰文件的格式,這里是常用的jks格式,如果不指定,則默認為keystore格式
-keypass指定私鑰的訪(fǎng)問(wèn)密碼,這里是123456
-storepass指定私鑰文件的訪(fǎng)問(wèn)密碼,這里是123456
-keystore指定存儲位置,這里是d:\log\test.jks
3).導出公鑰證書(shū)
執行下面的命令:
keytool -export -keystore d:\log\test.jks -alias rsatest -storepass 123456 -file d:\log\test.cer -rfc
其中
-export指定為導出操作
-keystore指定keystore文件
-alias指定導出keystore文件中的別名
-storepass指定私鑰訪(fǎng)問(wèn)密碼,這里是123456
-file指向導出路徑
-rfc以文本格式輸出,也就是以BASE64編碼輸出
生成了數字證書(shū)文件,就可以通過(guò)證書(shū)文件進(jìn)行簽名了。
應用代碼參見(jiàn)示例RsaTest.java。
4).CA認證
我們自己導出的公鑰證書(shū)只能作為測試用,如果要求在互聯(lián)網(wǎng)上使用,則可以使用特殊手段偽造同樣的證書(shū),這樣是不安全的,所以如果有一個(gè)被普遍信任的機構再對我們的證書(shū)進(jìn)行一次簽名,使得我們的證書(shū)無(wú)法偽造,就會(huì )比較安全。CA機構就是要解決這個(gè)問(wèn)題的。
CA機構,又稱(chēng)為證書(shū)授證(Certificate Authority)中心,作為電子商務(wù)交易中受信任的第三方,相當于公證人的角色。它承擔公鑰體系中公鑰的合法性檢驗的責任。CA機構使用它的證書(shū)(又稱(chēng)為根證書(shū))對用戶(hù)提交的證書(shū)進(jìn)行簽名,使得攻擊者不能偽造和篡改用戶(hù)證書(shū)。一般各種瀏覽器都會(huì )安裝主流CA機構的根證書(shū),只要是由這些機構認證過(guò)的證書(shū)都被瀏覽器信任;否則,瀏覽器將給出警告。如果瀏覽器沒(méi)有某個(gè)CA機構的根證書(shū),可以由用戶(hù)安裝。(網(wǎng)上訂過(guò)火車(chē)票的同事應該已經(jīng)知道如何安裝)
申請CA機構的官方認證,需要提交證書(shū)申請文件,使用如下命令生成
keytool -certreq -alias rsatest -file d:\log\test.csr -keystore d:\log\test.jks -storepass 123456 –v
該命令會(huì )產(chǎn)生test.csr證書(shū)申請文件,把該文件提交給CA機構,就可以得到官方認證的公鑰證書(shū),多為p7b格式。
應用代碼參見(jiàn)示例RsaTest.java。
2.DH
Diffie-Hellman算法(D-H算法),密鑰一致協(xié)議。是由公開(kāi)密鑰密碼體制的奠基人Diffie和Hellman所提出的一種思想。DH算法綜合使用了對稱(chēng)加密和非對稱(chēng)加密技術(shù)。DH算法的交互流程如下:
1.甲方構建密鑰對兒,將公鑰公布給乙方,將私鑰保留;雙方約定數據加密算法;乙方通過(guò)甲方公鑰構建密鑰對兒,將公鑰公布給甲方,將私鑰保留。? 2.甲方使用私鑰、乙方公鑰、約定數據加密算法構建本地密鑰,然后通過(guò)本地密鑰加密數據,發(fā)送給乙方加密后的數據;乙方使用私鑰、甲方公鑰、約定數據加密算法構建本地密鑰,然后通過(guò)本地密鑰對數據解密。? 3.乙方使用私鑰、甲方公鑰、約定數據加密算法構建本地密鑰,然后通過(guò)本地密鑰加密數據,發(fā)送給甲方加密后的數據;甲方使用私鑰、乙方公鑰、約定數據加密算法構建本地密鑰,然后通過(guò)本地密鑰對數據解密。
應用代碼參見(jiàn)示例DhTest.java。
3.DSA
DSA-Digital Signature Algorithm 是Schnorr和ElGamal簽名算法的變種,被美國NIST作為DSS(DigitalSignature Standard)。簡(jiǎn)單的說(shuō),這是一種更高級的驗證方式,用作數字簽名。不單單只有公鑰、私鑰,還有數字簽名。私鑰加密生成數字簽名,公鑰驗證數據及簽名。如果數據和簽名不匹配則認為驗證失??!數字簽名的作用就是校驗數據在傳輸過(guò)程中不被修改。
DSA算法也可以使用文件形式的數字證書(shū),制作方法同RSA證書(shū),如:
keytool -genkey -validity 36000 -alias dsatest -keyalg DSA -keysize 1024 -storetype jks -keypass 123456 -storepass 123456 -keystore d:\log\dsatest.jks
導出證書(shū):
keytool -export -keystore d:\log\dsatest.jks -alias dsatest -storepass 123456 -file d:\log\dsatest.cer -rfc
應用代碼參見(jiàn)示例DsaTest.java。
4.ECC ECC(Elliptic Curves Cryptography),橢圓曲線(xiàn)密碼編碼學(xué),是目前已知的公鑰體制中,對每比特所提供加密強度最高的一種體制。在軟件注冊保護方面起到很大的作用,一般的序列號通常由該算法產(chǎn)生。
ECC算法在jdk1.5后加入支持,目前僅僅只能完成密鑰的生成與解析。 如果想要獲得ECC算法實(shí)現,需要調用硬件完成加密/解密(ECC算法相當耗費資源,如果單純使用CPU進(jìn)行加密/解密,效率低下)。涉及到Java Card領(lǐng)域,PKCS#11。
附:安裝bouncy castle算法包
在java中實(shí)現很多加密算法的時(shí)候都需要使用到bouncy castle的算法包,可以使用如下代碼添加該包提供的功能:
Security.addProvider(new BouncyCastleProvider());
為了方便使用,該算法包可以手工配置到j(luò )re環(huán)境中,簡(jiǎn)單介紹下配置方法。
1.獲取算法包
bouncy castle官網(wǎng):www.bouncycastle.org/,根據所使用的jdk,到該網(wǎng)站獲取對應版本的jar包。我用的是jdk1.4,用的是bcprov-jdk14-139.jar。
2.把bcprov-jdk14-139.jar復制到j(luò )dk安裝目錄\jre\lib\ext目錄下
3.編輯jdk安裝目錄\jre\lib\security下java.security文件
使用編輯工具打開(kāi)java.security文件后找到如下片段:
security.provider.1=sun.security.provider.Sun
security.provider.2=com.sun.net.ssl.internal.ssl.Provider
security.provider.3=com.sun.rsajca.Provider
security.provider.4=com.sun.crypto.provider.SunJCE
security.provider.5=sun.security.jgss.SunProvide
在最后聲明security.provider的一行代碼之后再添加一行:
rsecurity.provider.6=org.bouncycastle.jce.provider.BouncyCastleProvider
6,是由前面一行的數值加1得到的;org.bouncycastle.jce.provider.BouncyCastleProvider就是bouncy castle的算法提供者,jdk在前5個(gè)算法提供者中都找不到相應的算法時(shí)就會(huì )到該類(lèi)中查找。
4.可以使用bouncy castle算法包了。
聯(lián)系客服