用JAVA開(kāi)發(fā)的程序?yàn)槭裁锤踩?br>
java幾乎成為網(wǎng)絡(luò)程序的標(biāo)準(zhǔn)語(yǔ)言
,java給我們提供了先進(jìn)的應(yīng)用技術(shù)的同時(shí)辫狼,同時(shí)給我們提供了非常強(qiáng)大的安全技術(shù)。這些技術(shù)主要包括:
1加密和解密技術(shù)辛润;
2JAVA源代碼保護(hù)技術(shù)膨处;
3數(shù)據(jù)完整性保護(hù)技術(shù)(數(shù)字簽名和消息摘要);
4數(shù)字證書(shū)技術(shù)频蛔;
5其它更高級(jí)的技術(shù)(包括Kerberos技術(shù)和JAVAGSS-API技術(shù)等等)灵迫;
Java加密擴(kuò)展即JavaCryptographyExtension,簡(jiǎn)稱JCE晦溪。它是Sun的加密服務(wù)軟件瀑粥,包含了加密和密匙生成功能。JCE是JCA(JavaCryptographyArchitecture)的一種擴(kuò)展三圆。
JCE沒(méi)有規(guī)定具體的加密算法狞换,但提供了一個(gè)框架,加密算法的具體實(shí)現(xiàn)可以作為服務(wù)提供者加入舟肉。除了JCE框架之外修噪,JCE軟件包還包含了SunJCE服務(wù)提供者,其中包括許多有用的密碼算法和數(shù)字簽名算法路媚,例如DES黄琼、RSA、DSA整慎、SHA脏款、MD5等围苫。使用JCE進(jìn)行加密解密非常方便,在后面我們將詳細(xì)的講述這一技術(shù)撤师。
如何最大限度的保證應(yīng)用的安全性
系統(tǒng)被掛了我們可以重裝系統(tǒng)剂府,但是應(yīng)用程序和服務(wù)的敏感數(shù)據(jù)和信息被改了或者被盜竊了那我們只有祈禱上帝,希望攻擊者能夠良心發(fā)現(xiàn)剃盾。不過(guò)千萬(wàn)不要沮喪腺占,我們可以利用JAVA為我們提供的一些武器來(lái)增強(qiáng)我們的信心,利用這些東西至少可以擋住99%以上的攻擊行為痒谴,使我們的損失最小化衰伯。
(1) 使用JCE技術(shù)來(lái)加密敏感信息和保護(hù)敏感信息的數(shù)字摘要;
(2) 使用JAVALoggingAPI建立Ri志和審核機(jī)制闰歪;
(3) 使用JAAS進(jìn)行用戶身份認(rèn)證和授權(quán)嚎研;
(4) 利用數(shù)字簽名技術(shù)保證數(shù)據(jù)的完整性;
(5) 利用自定義的類加載器來(lái)加載加密后的JAVA類文件以抗擊JAVA源代碼分析和攻擊库倘;
(6) 使用JCE來(lái)構(gòu)筑安全通訊協(xié)議來(lái)保證數(shù)據(jù)傳輸?shù)陌踩?/p>
5使用JCE技術(shù)來(lái)加密敏感信息和保護(hù)敏感信息的數(shù)字摘要
目前SUN公司的最新版本的JDK(JDK1.5)包含以下幾種密碼算法:
(1)DES:DES(數(shù)據(jù)加密標(biāo)準(zhǔn))是由IBM于上世紀(jì)70年代發(fā)明的,美國(guó)G0vernment將其采納為標(biāo)準(zhǔn)论矾。它是一種56位分組密碼教翩。
(2)TripleDES:該算法被用來(lái)解決使用DES技術(shù)的56位時(shí)密鑰Ri益減弱的強(qiáng)度,其方法是:使用兩個(gè)密鑰對(duì)明文運(yùn)行DES算法三次贪壳,從而得到112位有效密鑰強(qiáng)度饱亿。TripleDES有時(shí)稱為DESede(表示加密、解密和加密這三個(gè)階段)闰靴。
(3)AES:AES(高級(jí)加密標(biāo)準(zhǔn))取代DES成為美國(guó)標(biāo)準(zhǔn)彪笼。它是由JoanDaemen和VincentRijmen發(fā)明的,也被稱為Rinjdael算法蚂且。它是128位分組密碼配猫,密鑰長(zhǎng)度為128位、192位或256位杏死。
(4)RC2泵肄、RC4、和RC5:這些算法來(lái)自領(lǐng)先的加密安全性公司RSASecurity淑翼。
(5)Blowfish:這種算法是由BruceSchneier開(kāi)發(fā)的腐巢,它是一種具有從32位到448位(都是8的整數(shù)倍)可變密鑰長(zhǎng)度的分組密碼,被設(shè)計(jì)用于在軟件中有效實(shí)現(xiàn)微處理器玄括。
(6)其它:包括RSA冯丙、MD5、SHA遭京、DAS等胃惜。
除此而外风宁,由于JCE的開(kāi)放性,JDK還支持第三方提供的密碼算法蛹疯。
在系統(tǒng)中戒财,我們首先應(yīng)該搞清楚的問(wèn)題是:
(1)該對(duì)什么數(shù)據(jù)加密?(2)選擇什么樣的加密算法捺弦?(3)如何實(shí)現(xiàn)加密饮寞?
通過(guò)JCE使用對(duì)稱加密算法的過(guò)程一般是這樣的:
1引入JCE加密算法庫(kù);
2將要加密的數(shù)據(jù)變成一個(gè)字節(jié)數(shù)組列吼;
3調(diào)用Cipher.getInstance建立一個(gè)Cipher實(shí)例幽崩;
4選擇加密模式,調(diào)用init方法傳遞密鑰并初始化Cipher寞钥;
5調(diào)用doFinal方法慌申,傳遞要加密的字節(jié)數(shù)組進(jìn)行加密;
6將加密后的字節(jié)數(shù)組轉(zhuǎn)變?yōu)槠胀ǖ淖址愋汀?/p>