Java Web_几种加密算法_第1页
Java Web_几种加密算法_第2页
Java Web_几种加密算法_第3页
Java Web_几种加密算法_第4页
Java Web_几种加密算法_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、JavaWeb_几种加密算法一几种加密算法1:消息摘要:(数字指纹):既对一个任意长度的一个数据块进行计算,产生一个唯一指纹。MD5/SHA1发送给其他人你的信息和摘要,其他人用相同的加密方法得到摘要,最后进行比较摘要是否相同。MD5的全称是Message-DigestAlgorithm5(信息-摘要算法)。过程不可逆,是单向加密。SHA加密,与MD5相似的用法,只是两者的算法不同。2:单匙密码体制:DES:比较简便高效,密钥简短,加解密速度快,破译极其困难,但其安全性依赖于密匙的安全性。DES(DataEncryptionStandard)是发明最早的最广泛使用的分组对称加密算法。DES算法

2、的入口参数有三个:Key、Data、Mode。其中Key为8个字节共64位,是DES算法的工作密钥;Data也为8个字节64位,是要被加密或被解密的数据;Mode为DES的工作方式,有两种:加密或解密3:数字签名:就是信息发送者用其私钥对从所传报文中提取出的特征数据(或称数字指纹)进行RSA算法操作,以保证发信人无法抵赖曾发过该信息(即不可抵赖性),同时也确保信息报文在经签名后末被篡改(即完整性)。当信息接收者收到报文后,就可以用发送者的公钥对数字签名进行验证。代表:DSA4:非对称密匙密码体制(公匙体系):加密密匙不同于解密密匙,加密密匙公之于众,谁都可以使用,解密密匙只有解密人自己知道。代

3、表:RSA下面是对上面几个例子进行的简单实现:二代码解析1.MD5/SHApackagecom.text;importjava.security.MessageDigest;importjava.security.NoSuchAlgorithmException;publicclassMD5/*进行MD5/SHA力口密*paraminfo要加密的信息*returnString力口密后的字符串*/privateStringencryptToMD5(Stringstr)bytebyteArray=null;try/得到一个MD5的消息摘要MessageDigestmessageDigestMess

4、ageDigest.getInstance(MD5);/得到一个SHA-1的消息摘要/messageDigest=MessageDigest.getinstance(SHA-1);/messageDigest.reset();/添加要进行计算摘要的信息messageDigest.update(str.getBytes();/messageDigest.update(str.getBytes(UTF-8);/得到该摘要byteArray=messageDigest.digest();catch(NoSuchAlgorithmExceptione)e.printStackTrace();/将摘要转

5、为字符串返回returnbyte2hex(byteArray);/*将二进制转化为16进制字符串paramb二进制字节数组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);/执行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秘密(对称)密钥*/publicSecretKeycreateSecretKey(Stringalgorithm)/声明KeyGenerator对象KeyGeneratorkeygen;/声明密钥对象创建密匙SecretKeydeskey=null;try/返回生成指定算法的秘密密钥的KeyGenerator对象keygen=KeyGenerator.getInstance(algorithm);

8、/生成一个密钥deskey=keygen.generateKey();catch(NoSuchAlgorithmExceptione)e.printStackTrace();/返回密匙returndeskey;/*根据密匙进行DES加密paramkey密匙paraminfo要加密的信息returnString力口密后的信息*/publicStringencryptToDES(SecretKeykey,Stringinfo)/定义力口密算法,可用DES,DESede,Blowfish(RNG),(可以不写)StringAlgorithm=DES;/加密随机数生成器SecureRandomsrne

9、wSecureRandom();/定义要生成的密文bytecipherByte=null;try/得到加密/解密器Cipherc1=Cipher.getInstance(Algorithm);/用指定的密钥和模式初始化Cipher对象/参数:(ENCRYPTMODE,DECRYPTMODE,WRAPMODE,UNWRAPMODE)c1.init(Cipher.ENCRYPT_MODE,key,sr);/对要加密的内容进行编码处理,cipherByte=c1.doFinal(info.getBytes();catch(Exceptione)e.printStackTrace();/返回密文的十六

10、进制形式returnbyte2hex(cipherByte);/*根据密匙进行DES解密paramkey密匙paramsInfo要解密的密文returnString返回解密后信息*/sInfo)publicStringdecryptByDES(SecretKeykey,String/定义加密算法,StringAlgorithm=DES;/加密随机数生成器(RNG)SecureRandomsr=newSecureRandom();bytecipherByte=null;try/得到加密/解密器Cipherc1=Cipher.getInstance(Algorithm)/用指定的密钥和模式初始化C

11、ipher对象c1.init(Cipher.DECRYPT_MODE,key,sr);/对要解密的内容进行编码处理cipherByte=c1.doFinal(hex2byte(sInfo);catch(Exceptione)e.printStackTrace();/returnbyte2hex(cipherByte);returnnewString(cipherByte);/*将二进制转化为16进制字符串*paramb二进制字节数组*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卜六进制字符串转化为2进制*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();/生成一个DES算法的密匙SecretKeykey=des.createSecretKey(DES);/用密匙加密信息HelloStringstrl=d

14、es.encryptToDES(key,Hello);System.ou亡.println(使用des力口密信息Hello为:+str1);/02E7AADB2E1DBCF6/使用这个密匙解密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/*创建密匙组,并将公匙,私匙放入到指定文件中*默认放入mykeys.bat文件中*/publicvoidcreatePairKey()try/根据特定的算法一个密钥对生成器KeyPairGeneratorkeygen=KeyPairGenerator.getlnstance(DSA);/加密随机数生成器(RNG)SecureRandomrandom=newSecureRandom();/重新设置此随机对象的种子random.setSeed(100

16、0);/使用给定的随机源(和默认的参数集合)初始化确定密钥大小的密钥对生成器keygen.initialize(512,random);/keygen.initialize(512);/生成密钥组KeyPairkeys=keygen.generateKeyPair();/得到公匙PublicKeypubkey=keys.getPublic();/得到私匙PrivateKeyprikey=keys.getPrivate();/将公匙私匙写入到文件当中doObjToFile(mykeys.bat,newObjectprikey,pubkey);catch(NoSuchAlgorithmExcept

17、ione)e.printStackTrace();/*利用私匙对信息进行签名把签名后的信息放入到指定的文件中*paraminfo要签名的信息paramsignfile存入的文件*/publicvoidsignToInfo(Stringinfo,Stringsignfile)/从文件当中读取私匙PrivateKeymyprikey=(PrivateKey)getObjFromFile(mykeys.bat,1);/从文件中读取公匙PublicKeymypubkey=(PublicKey)getObjFromFile(mykeys.bat,2);try/Signature对象可用来生成和验证数字签

18、名Signaturesignet=Signature.getInstance(DSA);/初始化签署签名的私钥signet.initSign(myprikey);/更新要由字节签名或验证的数据signet.update(info.getBytes();/签署或验证所有更新字节的签名,返回签名bytesigned=signet.sign();/将数字签名,公匙,信息放入文件中doObjToFile(signfile,newObjectsigned,mypubkey,info);catch(Exceptione)e.printStackTrace();/*读取数字签名文件根据公匙,签名,信息验证信

19、息的合法性*returntrue验证成功false验证失败*/publicbooleanvalidateSign(Stringsignfile)/读取公匙PublicKeymypubkey=(PublicKey)getObjFromFile(signfile,2);/读取签名bytesigned=(byte)getObjFromFile(signfile,1);/读取信息Stringinfo=(String)getObjFromFile(signfile,3);try/初始一个Signature对象,并用公钥和签名进行验证Signaturesignetcheck=Signature.getIn

20、stance(DSA);/初始化验证签名的公钥signetcheck.initVerify(mypubkey);/使用指定的byte数组更新要签名或验证的数据signetcheck.update(info.getBytes();System.out.println(info);/验证传入的签名returnsignetcheck.verify(signed);catch(Exceptione)e.printStackTrace();returnfalse;/paramfile指定的文件*将指定的对象写入指定的文件*paramfile指定写入的文件paramobjs要写入的对象*/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、定位置的对象*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();/创建公匙和私匙dsa.createPairKey();/对Hello使用私匙进行签名dsa.signToInfo(Hello,mysign.bat);/利用公匙对签名进行验证。if(dsa.validateSign(mysign.bat)System.out.println

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论