java调用AES算法产生密钥并加解密文件

 最近在做一个项目,要用到数据加密算法,所以就看了下《java加密与解密的艺术》这本书,最后就参考了下AES加密算法来加密文件,一是它加密标准高、密钥建立时间短、灵敏性好、内存需求低,二是因为javaAPI已经自带了AES算法,用起来很方便顺手,当然,这个还不算,密钥的产生还调用了Base64算法对AES产生的密钥进行了二次加密,确保密钥的安全可靠,大家有兴趣的话可以去看看《java加密与解密的艺术》一书,这里我贴上代码供参考:

[java]  view plain  copy
  1. <span style="font-size:18px;">import java.io.BufferedInputStream;  
  2. import java.io.BufferedOutputStream;  
  3. import java.io.File;  
  4. import java.io.FileInputStream;  
  5. import java.io.FileOutputStream;  
  6. import java.security.SecureRandom;  
  7. import java.util.Date;  
  8.   
  9. import javax.crypto.Cipher;  
  10. import javax.crypto.KeyGenerator;  
  11. import javax.crypto.SecretKey;  
  12. import javax.crypto.spec.SecretKeySpec;  
  13.   
  14. import org.apache.commons.codec.binary.Base64;  
  15.   
  16. public class Test {  
  17.       
  18.     private static final int ZERO = 0;  
  19.     private static final int ONE = 1;  
  20.     private static String derectory = "c:";  
  21.     private static File file1;  
  22.     private static String str = null;  
  23.       
  24.     public static byte[] initKey() throws Exception{  
  25.         //实例化  
  26.         KeyGenerator kgen = KeyGenerator.getInstance("AES");  
  27.         //设置密钥长度  
  28.         kgen.init(128);  
  29.         //生成密钥  
  30.         SecretKey skey = kgen.generateKey();  
  31.         //返回密钥的二进制编码  
  32.         return skey.getEncoded();  
  33.     }  
  34.       
  35.     public static void main(String[] args) {  
  36.         try {  
  37.             byte[] key = Test.initKey();  
  38.             str = Base64.encodeBase64String(key);  
  39.             System.out.println(str);  
  40.             File file = new File(derectory+"/"+"k.txt");          
  41.             encryptfile(file,str);  
  42.             decriptfile(file1,str);  
  43.         } catch (Exception e) {  
  44.             e.printStackTrace();  
  45.         }  
  46.     }  
  47.   
  48.     /** 
  49.      * 文件处理方法 
  50.      * code为加密或者解密的判断条件 
  51.      * key 加密密钥 
  52.      */  
  53.     public static void doFile(int code, File file, String key) throws Exception{  
  54.         BufferedInputStream bis = new BufferedInputStream(new FileInputStream(  
  55.                 file));  
  56.         byte[] bytIn = new byte[(int) file.length()];  
  57.         bis.read(bytIn);  
  58.         bis.close();  
  59.         // AES加密  
  60.         KeyGenerator kgen = KeyGenerator.getInstance("AES");  
  61.         kgen.init(128new SecureRandom(key.getBytes()));  
  62.         SecretKey skey = kgen.generateKey();  
  63.         byte[] raw = skey.getEncoded();  
  64.         SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");  
  65.         Cipher cipher = Cipher.getInstance("AES");  
  66.         if(0 == code){  
  67.             cipher.init(Cipher.ENCRYPT_MODE, skeySpec);  
  68.         }else if(1 == code){  
  69.             cipher.init(Cipher.DECRYPT_MODE, skeySpec);  
  70.         }         
  71.         // 写文件  
  72.         byte[] bytOut = cipher.doFinal(bytIn);  
  73.         file1 = new File(derectory+"/"+new Date().getTime()+"."+file.getName().split("\\.")[1]);  
  74.         BufferedOutputStream bos = new BufferedOutputStream(  
  75.                 new FileOutputStream(file1));  
  76.         bos.write(bytOut);  
  77.         bos.close();  
  78.     }  
  79.       
  80.     //文件加密  
  81.     public static void encryptfile(File file, String key) throws Exception {  
  82.         doFile(ZERO,file,key);  
  83.     }  
  84.       
  85.     //文件解密  
  86.     public static void decriptfile(File file, String key) throws Exception{  
  87.         doFile(ONE,file,key);  
  88.     }  
  89. }</span>  

注:Base64是需要加入commons-codec-1.4.jar以上的包的,所以需要大家去下一个!这个算法加密的效率还是很可观的,如果有可以改进的地方望大家多赐教啊!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值