AES是美国联邦政府采用的商业及政府数据加密标准,预计将在未来几十年里代替DES在各个领域中得到广泛应用。AES提供128位密钥,因此,128位AES的加密强度是56位DES加密强度的1021倍还多。假设可以制造一部可以在1秒内破解DES密码的机器,那么使用这台机器破解一个128位AES密码需要大约149亿万年的时间。(更深一步比较而言,宇宙一般被认为存在了还不到200亿年)因此可以预计,美国国家标准局倡导的AES即将作为新标准取代DES。
- packagecom.jshx.utils;
- importjava.io.UnsupportedEncodingException;
- importjava.security.InvalidKeyException;
- importjava.security.NoSuchAlgorithmException;
- importjava.security.SecureRandom;
- importjavax.crypto.BadPaddingException;
- importjavax.crypto.Cipher;
- importjavax.crypto.IllegalBlockSizeException;
- importjavax.crypto.KeyGenerator;
- importjavax.crypto.NoSuchPaddingException;
- importjavax.crypto.SecretKey;
- importjavax.crypto.spec.SecretKeySpec;
- importorg.apache.axis.encoding.Base64;
- publicclassAES{
- publicstaticbyte[]encrypt(Stringcontent,Stringpassword){
- try{
- KeyGeneratorkgen=KeyGenerator.getInstance("AES");
- kgen.init(128,newSecureRandom(password.getBytes()));
- SecretKeysecretKey=kgen.generateKey();
- byte[]enCodeFormat=secretKey.getEncoded();
- SecretKeySpeckey=newSecretKeySpec(enCodeFormat,"AES");
- Ciphercipher=Cipher.getInstance("AES");
- byte[]byteContent=content.getBytes("utf-8");
- cipher.init(Cipher.ENCRYPT_MODE,key);
- byte[]result=cipher.doFinal(byteContent);
- returnresult;
- }catch(NoSuchAlgorithmExceptione){
- e.printStackTrace();
- }catch(NoSuchPaddingExceptione){
- e.printStackTrace();
- }catch(InvalidKeyExceptione){
- e.printStackTrace();
- }catch(UnsupportedEncodingExceptione){
- e.printStackTrace();
- }catch(IllegalBlockSizeExceptione){
- e.printStackTrace();
- }catch(BadPaddingExceptione){
- e.printStackTrace();
- }
- returnnull;
- }
- publicstaticbyte[]decrypt(byte[]content,Stringpassword){
- try{
- KeyGeneratorkgen=KeyGenerator.getInstance("AES");
- kgen.init(128,newSecureRandom(password.getBytes()));
- SecretKeysecretKey=kgen.generateKey();
- byte[]enCodeFormat=secretKey.getEncoded();
- SecretKeySpeckey=newSecretKeySpec(enCodeFormat,"AES");
- Ciphercipher=Cipher.getInstance("AES");
- cipher.init(Cipher.DECRYPT_MODE,key);
- byte[]result=cipher.doFinal(content);
- returnresult;
- }catch(NoSuchAlgorithmExceptione){
- e.printStackTrace();
- }catch(NoSuchPaddingExceptione){
- e.printStackTrace();
- }catch(InvalidKeyExceptione){
- e.printStackTrace();
- }catch(IllegalBlockSizeExceptione){
- e.printStackTrace();
- }catch(BadPaddingExceptione){
- e.printStackTrace();
- }
- returnnull;
- }
- publicstaticStringparseByte2HexStr(bytebuf[]){
- StringBuffersb=newStringBuffer();
- for(inti=0;i<buf.length;i++){
- Stringhex=Integer.toHexString(buf[i]&0xFF);
- if(hex.length()==1){
- hex='0'+hex;
- }
- sb.append(hex.toUpperCase());
- }
- returnsb.toString();
- }
- publicstaticbyte[]parseHexStr2Byte(StringhexStr){
- if(hexStr.length()<1)
- returnnull;
- byte[]result=newbyte[hexStr.length()/2];
- for(inti=0;i<hexStr.length()/2;i++){
- inthigh=Integer.parseInt(hexStr.substring(i*2,i*2+1),16);
- intlow=Integer.parseInt(hexStr.substring(i*2+1,i*2+2),16);
- result[i]=(byte)(high*16+low);
- }
- returnresult;
- }
- publicstaticbyte[]encrypt2(Stringcontent,Stringpassword){
- try{
- SecretKeySpeckey=newSecretKeySpec(password.getBytes(),"AES");
- Ciphercipher=Cipher.getInstance("AES/ECB/NoPadding");
- byte[]byteContent=content.getBytes("utf-8");
- cipher.init(Cipher.ENCRYPT_MODE,key);
- byte[]result=cipher.doFinal(byteContent);
- returnresult;
- }catch(NoSuchAlgorithmExceptione){
- e.printStackTrace();
- }catch(NoSuchPaddingExceptione){
- e.printStackTrace();
- }catch(InvalidKeyExceptione){
- e.printStackTrace();
- }catch(UnsupportedEncodingExceptione){
- e.printStackTrace();
- }catch(IllegalBlockSizeExceptione){
- e.printStackTrace();
- }catch(BadPaddingExceptione){
- e.printStackTrace();
- }
- returnnull;
- }
- publicstaticvoidmain(String[]args){
- Stringcontent="test";
- Stringpassword="12345678";
- System.out.println("加密前:"+content);
- byte[]encryptResult=encrypt(content,password);
- Stringtt4=Base64.encode(encryptResult);
- System.out.println(newString(tt4));
- byte[]decryptResult=decrypt(encryptResult,password);
- System.out.println("解密后:"+newString(decryptResult));
- }
- }
分享到:
相关推荐
用java实现了DES的加密算法 有可视化见面 缺点:输入的密钥最后为5为字符
des加密解密java实现des加密解密java实现des加密解密java实现des加密解密java实现des加密解密java实现des加密解密java实现
Java实现文件的RSA和DES加密 说明代码
java实现DES加密、解密算法 代码中有详细的注释,有不对或者写的不好的地方请大家指导
java实现des加密和解密,encrypt是加密函数 decrypt是解密函数
DES 加密 JAVA 网络安全与密码技术
Java实现Des加密(不用加载包),有完整S盒子。 部分代码如下: ackage desJava; import java.util.*; public class Des { byte[] bytekey; public Des(String strKey) { this.bytekey = strKey.getBytes();...
主要介绍了使用java自带des加密算法实现文件加密和字符串加密的示例,需要的朋友可以参考下
虽然如此,在某些简单应用中,我们还是可以使用DES加密算法,本文简单讲解DES的JAVA实现。 JAVA实现加密代码有详细解释,不多废话。注意:DES加密和解密过程中,密钥长度都必须是8的倍数 代码如下: public byte[] ...
使用java实现的DES算法加密,带有界面。
DES加解密算法,java实现,可运行!
项目中需要用到这个,后来到网上找了不少,但算出来结果不对.这个是经过个人验证的.有类似需要的可以考虑
主要介绍了Java实现DES加密与解密,md5加密以及Java实现MD5加密解密类 ,需要的朋友可以参考下
java实现的3DES加密算法,类中支持多种密钥长度
Java实现des加密解密算法,des加密解密算法
java的DES算法实现,可以加密文字以及图片,引用java加密的包
php实现的代码des加密解密,适用于java的des加密解密。
用JAVA源代码编写的,可以运行,但没有窗口。完善中