版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、JavaWeb_幾種加密算法一幾種加密算法1:消息摘要:(數(shù)字指紋):既對(duì)一個(gè)任意長(zhǎng)度的一個(gè)數(shù)據(jù)塊進(jìn)行計(jì)算,產(chǎn)生一個(gè)唯一指紋。MD5/SHA1發(fā)送給其他人你的信息和摘要,其他人用相同的加密方法得到摘要,最后進(jìn)行比較摘要是否相同。MD5的全稱是Message-DigestAlgorithm5(信息-摘要算法)。過(guò)程不可逆,是單向加密。SHA加密,與MD5相似的用法,只是兩者的算法不同。2:?jiǎn)纬酌艽a體制:DES:比較簡(jiǎn)便高效,密鑰簡(jiǎn)短,加解密速度快,破譯極其困難,但其安全性依賴于密匙的安全性。DES(DataEncryptionStandard)是發(fā)明最早的最廣泛使用的分組對(duì)稱加密算法。DES算法
2、的入口參數(shù)有三個(gè):Key、Data、Mode。其中Key為8個(gè)字節(jié)共64位,是DES算法的工作密鑰;Data也為8個(gè)字節(jié)64位,是要被加密或被解密的數(shù)據(jù);Mode為DES的工作方式,有兩種:加密或解密3:數(shù)字簽名:就是信息發(fā)送者用其私鑰對(duì)從所傳報(bào)文中提取出的特征數(shù)據(jù)(或稱數(shù)字指紋)進(jìn)行RSA算法操作,以保證發(fā)信人無(wú)法抵賴曾發(fā)過(guò)該信息(即不可抵賴性),同時(shí)也確保信息報(bào)文在經(jīng)簽名后末被篡改(即完整性)。當(dāng)信息接收者收到報(bào)文后,就可以用發(fā)送者的公鑰對(duì)數(shù)字簽名進(jìn)行驗(yàn)證。代表:DSA4:非對(duì)稱密匙密碼體制(公匙體系):加密密匙不同于解密密匙,加密密匙公之于眾,誰(shuí)都可以使用,解密密匙只有解密人自己知道。代
3、表:RSA下面是對(duì)上面幾個(gè)例子進(jìn)行的簡(jiǎn)單實(shí)現(xiàn):二代碼解析1.MD5/SHApackagecom.text;importjava.security.MessageDigest;importjava.security.NoSuchAlgorithmException;publicclassMD5/*進(jìn)行MD5/SHA力口密*paraminfo要加密的信息*returnString力口密后的字符串*/privateStringencryptToMD5(Stringstr)bytebyteArray=null;try/得到一個(gè)MD5的消息摘要MessageDigestmessageDigestMess
4、ageDigest.getInstance(MD5);/得到一個(gè)SHA-1的消息摘要/messageDigest=MessageDigest.getinstance(SHA-1);/messageDigest.reset();/添加要進(jìn)行計(jì)算摘要的信息messageDigest.update(str.getBytes();/messageDigest.update(str.getBytes(UTF-8);/得到該摘要byteArray=messageDigest.digest();catch(NoSuchAlgorithmExceptione)e.printStackTrace();/將摘要轉(zhuǎn)
5、為字符串返回returnbyte2hex(byteArray);/*將二進(jìn)制轉(zhuǎn)化為16進(jìn)制字符串paramb二進(jìn)制字節(jié)數(shù)組returnString*/publicStringbyte2hex(byteb)Stringhs=;Stringstmp=;for(inti=0;ib.length;i+)stmp=(java.lang.Integer.toHexString(bi&OXFF);if(stmp.length()1)hs=hs+0+stmp;elsehs=hs+stmp;returnhs.toUpperCase();publicstaticvoidmain(Stringargs)String
6、msg=Hello;System.out.println(明文是:+msg);/執(zhí)行MD5力口密Hello!System.out.println(MD5力口密了是:+newMD5().encryptToMD5(msg);/8B1A9953C4611296A827ABF8C47804D72.DESpackagecom.text;importjava.security.NoSuchAlgorithmException;importjava.security.SecureRandom;importjavax.crypto.Cipher;importjavax.crypto.KeyGenerator;
7、importjavax.crypto.SecretKey;publicclassDES/paramalgorithm力口密算法,可用DES,DESede,BlowfishreturnSecretKey秘密(對(duì)稱)密鑰*/publicSecretKeycreateSecretKey(Stringalgorithm)/聲明KeyGenerator對(duì)象KeyGeneratorkeygen;/聲明密鑰對(duì)象創(chuàng)建密匙SecretKeydeskey=null;try/返回生成指定算法的秘密密鑰的KeyGenerator對(duì)象keygen=KeyGenerator.getInstance(algorithm);
8、/生成一個(gè)密鑰deskey=keygen.generateKey();catch(NoSuchAlgorithmExceptione)e.printStackTrace();/返回密匙returndeskey;/*根據(jù)密匙進(jìn)行DES加密paramkey密匙paraminfo要加密的信息returnString力口密后的信息*/publicStringencryptToDES(SecretKeykey,Stringinfo)/定義力口密算法,可用DES,DESede,Blowfish(RNG),(可以不寫)StringAlgorithm=DES;/加密隨機(jī)數(shù)生成器SecureRandomsrne
9、wSecureRandom();/定義要生成的密文bytecipherByte=null;try/得到加密/解密器Cipherc1=Cipher.getInstance(Algorithm);/用指定的密鑰和模式初始化Cipher對(duì)象/參數(shù):(ENCRYPTMODE,DECRYPTMODE,WRAPMODE,UNWRAPMODE)c1.init(Cipher.ENCRYPT_MODE,key,sr);/對(duì)要加密的內(nèi)容進(jìn)行編碼處理,cipherByte=c1.doFinal(info.getBytes();catch(Exceptione)e.printStackTrace();/返回密文的十六
10、進(jìn)制形式returnbyte2hex(cipherByte);/*根據(jù)密匙進(jìn)行DES解密paramkey密匙paramsInfo要解密的密文returnString返回解密后信息*/sInfo)publicStringdecryptByDES(SecretKeykey,String/定義加密算法,StringAlgorithm=DES;/加密隨機(jī)數(shù)生成器(RNG)SecureRandomsr=newSecureRandom();bytecipherByte=null;try/得到加密/解密器Cipherc1=Cipher.getInstance(Algorithm)/用指定的密鑰和模式初始化C
11、ipher對(duì)象c1.init(Cipher.DECRYPT_MODE,key,sr);/對(duì)要解密的內(nèi)容進(jìn)行編碼處理cipherByte=c1.doFinal(hex2byte(sInfo);catch(Exceptione)e.printStackTrace();/returnbyte2hex(cipherByte);returnnewString(cipherByte);/*將二進(jìn)制轉(zhuǎn)化為16進(jìn)制字符串*paramb二進(jìn)制字節(jié)數(shù)組*returnString*/publicStringbyte2hex(byteb)Stringhs=;Stringstmp=;for(intn=0;nb.leng
12、th;n+)stmp=(java.lang.Integer.toHexString(bn&OXFF);if(stmp.length()1)hs=hs+0+stmp;elsehs=hs+stmp;returnhs.toUpperCase();/byte卜六進(jìn)制字符串轉(zhuǎn)化為2進(jìn)制*paramhex*return*/publicbytehex2byte(Stringhex)byteretnewbyte8;bytetmphex.getBytes();for(inti0;iOxEF*paramsrclbyte*returnbyte*/publicstaticbyteuniteBytes(bytesrcO
13、,bytesrcl)byte_b0=Byte.decode(0 x+newString(newbytesrc0).byteValue();bO=(byte)(_b04);bytebytebl=Byte.decode(Ox+newString(newbytesrcl).byteValue();ret=(byte)(_b0八_b1);returnret;publicstaticvoidmain(Stringargs)DESdes=newDES();/生成一個(gè)DES算法的密匙SecretKeykey=des.createSecretKey(DES);/用密匙加密信息HelloStringstrl=d
14、es.encryptToDES(key,Hello);System.ou亡.println(使用des力口密信息Hello為:+str1);/02E7AADB2E1DBCF6/使用這個(gè)密匙解密Stringstr2=des.decryptByDES(key,str1);System.ou亡.println(解密后為:+str2);3.DSApackagecom.text;importjava.io.FilelnputStream;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.ObjectInputSt
15、ream;importjava.io.ObjectOutputStream;importjava.security.*;publicclassDSA/*創(chuàng)建密匙組,并將公匙,私匙放入到指定文件中*默認(rèn)放入mykeys.bat文件中*/publicvoidcreatePairKey()try/根據(jù)特定的算法一個(gè)密鑰對(duì)生成器KeyPairGeneratorkeygen=KeyPairGenerator.getlnstance(DSA);/加密隨機(jī)數(shù)生成器(RNG)SecureRandomrandom=newSecureRandom();/重新設(shè)置此隨機(jī)對(duì)象的種子random.setSeed(100
16、0);/使用給定的隨機(jī)源(和默認(rèn)的參數(shù)集合)初始化確定密鑰大小的密鑰對(duì)生成器keygen.initialize(512,random);/keygen.initialize(512);/生成密鑰組KeyPairkeys=keygen.generateKeyPair();/得到公匙PublicKeypubkey=keys.getPublic();/得到私匙PrivateKeyprikey=keys.getPrivate();/將公匙私匙寫入到文件當(dāng)中doObjToFile(mykeys.bat,newObjectprikey,pubkey);catch(NoSuchAlgorithmExcept
17、ione)e.printStackTrace();/*利用私匙對(duì)信息進(jìn)行簽名把簽名后的信息放入到指定的文件中*paraminfo要簽名的信息paramsignfile存入的文件*/publicvoidsignToInfo(Stringinfo,Stringsignfile)/從文件當(dāng)中讀取私匙PrivateKeymyprikey=(PrivateKey)getObjFromFile(mykeys.bat,1);/從文件中讀取公匙PublicKeymypubkey=(PublicKey)getObjFromFile(mykeys.bat,2);try/Signature對(duì)象可用來(lái)生成和驗(yàn)證數(shù)字簽
18、名Signaturesignet=Signature.getInstance(DSA);/初始化簽署簽名的私鑰signet.initSign(myprikey);/更新要由字節(jié)簽名或驗(yàn)證的數(shù)據(jù)signet.update(info.getBytes();/簽署或驗(yàn)證所有更新字節(jié)的簽名,返回簽名bytesigned=signet.sign();/將數(shù)字簽名,公匙,信息放入文件中doObjToFile(signfile,newObjectsigned,mypubkey,info);catch(Exceptione)e.printStackTrace();/*讀取數(shù)字簽名文件根據(jù)公匙,簽名,信息驗(yàn)證信
19、息的合法性*returntrue驗(yàn)證成功false驗(yàn)證失敗*/publicbooleanvalidateSign(Stringsignfile)/讀取公匙PublicKeymypubkey=(PublicKey)getObjFromFile(signfile,2);/讀取簽名bytesigned=(byte)getObjFromFile(signfile,1);/讀取信息Stringinfo=(String)getObjFromFile(signfile,3);try/初始一個(gè)Signature對(duì)象,并用公鑰和簽名進(jìn)行驗(yàn)證Signaturesignetcheck=Signature.getIn
20、stance(DSA);/初始化驗(yàn)證簽名的公鑰signetcheck.initVerify(mypubkey);/使用指定的byte數(shù)組更新要簽名或驗(yàn)證的數(shù)據(jù)signetcheck.update(info.getBytes();System.out.println(info);/驗(yàn)證傳入的簽名returnsignetcheck.verify(signed);catch(Exceptione)e.printStackTrace();returnfalse;/paramfile指定的文件*將指定的對(duì)象寫入指定的文件*paramfile指定寫入的文件paramobjs要寫入的對(duì)象*/publicvo
21、iddoObjToFile(Stringfile,Objectobjs)ObjectOutputStreamoos=null;tryFileOutputStreamfos=newFileOutputStream(file);oos=newObjectOutputStream(fos);for(inti=0;iobjs.length;i+)oos.writeObject(objsi);catch(Exceptione)e.printStackTrace();finallytryoos.close();catch(IOExceptione)e.printStackTrace();/*返回在文件中指
22、定位置的對(duì)象*parami從1開始return*/publicObjectgetObjFromFile(Stringfile,inti)ObjectInputStreamois=null;Objectobj=null;tryFileInputStreamfis=newFileInputStream(file);ois=newObjectInputStream(fis);for(intj=0;ji;j+)obj=ois.readObject();catch(Exceptione)e.printStackTrace();finallytryois.close();catch(IOExceptione)e.printStackTrace();returnobj;publicstaticvoidmain(Stringargs)DSAdsa=newDSA();/創(chuàng)建公匙和私匙dsa.createPairKey();/對(duì)Hello使用私匙進(jìn)行簽名dsa.signToInfo(Hello,mysign.bat);/利用公匙對(duì)簽名進(jìn)行驗(yàn)證。if(dsa.validateSign(mysign.bat)System.out.println
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《可口可樂(lè)收購(gòu)匯源》課件
- 銷售人員上半年工作總結(jié)(18篇)
- 2024抵押貸款委托擔(dān)保合同書
- 蘇州科技大學(xué)天平學(xué)院《機(jī)械制圖二》2021-2022學(xué)年第一學(xué)期期末試卷
- 農(nóng)藥制造中的質(zhì)量控制策略考核試卷
- 《招投標(biāo)培訓(xùn)》課件
- 2024年政教副主任工作總結(jié)(3篇)
- 制造業(yè)數(shù)字化設(shè)計(jì)與制造提升產(chǎn)品開發(fā)效率考核試卷
- 信息系統(tǒng)的數(shù)據(jù)管理與數(shù)據(jù)挖掘技術(shù)考核試卷
- 安全生產(chǎn)風(fēng)險(xiǎn)管理基礎(chǔ)培訓(xùn)課件考核試卷
- GB/T 37439-2019高速鐵路預(yù)制后張法預(yù)應(yīng)力混凝土簡(jiǎn)支梁
- GB/T 28035-2011軟件系統(tǒng)驗(yàn)收規(guī)范
- GB/T 18723-2002印刷技術(shù)用黏性儀測(cè)定漿狀油墨和連接料的黏性
- CAK6136V車床面板操作
- 礦井提升機(jī)技術(shù)參數(shù)介紹及設(shè)備選型過(guò)程
- 《經(jīng)濟(jì)學(xué)基礎(chǔ)》試題庫(kù)(附答案)
- 學(xué)前教育論文范文8000字(通用九篇)
- 小學(xué)數(shù)學(xué)北師大五年級(jí)上冊(cè)數(shù)學(xué)好玩 圖形中的規(guī)律-
- 《富饒的西沙群島》說(shuō)課稿(優(yōu)秀3篇)
- 墓碑碑文范文(通用十四篇)
- 大象版一年級(jí)科學(xué)上冊(cè)全冊(cè)教案
評(píng)論
0/150
提交評(píng)論