java调用AES算法产生密钥并加解密文件
来源:互联网 发布:ubuntu 删除目录 编辑:程序博客网 时间:2024/04/29 22:40
最近在做一个项目,要用到数据加密算法,所以就看了下《java加密与解密的艺术》这本书,最后就参考了下AES加密算法来加密文件,一是它加密标准高、密钥建立时间短、灵敏性好、内存需求低,二是因为javaAPI已经自带了AES算法,用起来很方便顺手,当然,这个还不算,密钥的产生还调用了Base64算法对AES产生的密钥进行了二次加密,确保密钥的安全可靠,大家有兴趣的话可以去看看《java加密与解密的艺术》一书,这里我贴上代码供参考:
import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.security.SecureRandom;import java.util.Date;import javax.crypto.Cipher;import javax.crypto.KeyGenerator;import javax.crypto.SecretKey;import javax.crypto.spec.SecretKeySpec;import org.apache.commons.codec.binary.Base64;public class Test {private static final int ZERO = 0;private static final int ONE = 1;private static String derectory = "c:";private static File file1;private static String str = null;public static byte[] initKey() throws Exception{//实例化KeyGenerator kgen = KeyGenerator.getInstance("AES");//设置密钥长度kgen.init(128);//生成密钥SecretKey skey = kgen.generateKey();//返回密钥的二进制编码return skey.getEncoded();}public static void main(String[] args) {try {byte[] key = Test.initKey();str = Base64.encodeBase64String(key);System.out.println(str);File file = new File(derectory+"/"+"k.txt");encryptfile(file,str);decriptfile(file1,str);} catch (Exception e) {e.printStackTrace();}}/** * 文件处理方法 * code为加密或者解密的判断条件 * key 加密密钥 */public static void doFile(int code, File file, String key) throws Exception{BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));byte[] bytIn = new byte[(int) file.length()];bis.read(bytIn);bis.close();// AES加密KeyGenerator kgen = KeyGenerator.getInstance("AES");kgen.init(128, new SecureRandom(key.getBytes()));SecretKey skey = kgen.generateKey();byte[] raw = skey.getEncoded();SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");Cipher cipher = Cipher.getInstance("AES");if(0 == code){cipher.init(Cipher.ENCRYPT_MODE, skeySpec);}else if(1 == code){cipher.init(Cipher.DECRYPT_MODE, skeySpec);}// 写文件byte[] bytOut = cipher.doFinal(bytIn);file1 = new File(derectory+"/"+new Date().getTime()+"."+file.getName().split("\\.")[1]);BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file1));bos.write(bytOut);bos.close();}//文件加密public static void encryptfile(File file, String key) throws Exception {doFile(ZERO,file,key);}//文件解密public static void decriptfile(File file, String key) throws Exception{doFile(ONE,file,key);}}
注:Base64是需要加入commons-codec-1.4.jar以上的包的,所以需要大家去下一个!这个算法加密的效率还是很可观的,如果有可以改进的地方望大家多赐教啊!
- java调用AES算法产生密钥并加解密文件
- Java实现AES的128、256位密钥加解密算法 并 解决Illegal key size or default parameters问题
- Java AES文件加解密
- AES加解密算法
- AES加解密算法
- AES加解密算法
- AES加解密算法
- 用java实现AES加解密算法
- Delphi-JAVA互加解密AES算法
- 文件AES加解密
- Java AES文件和文本加解密
- 产生随机文件并加解密
- AES加解密算法详解
- AES加解密算法二
- Delphi关于改进AES算法的加解密文件功能
- 文件加解密 - 密钥保存
- AES加解密(java)
- java AES 加解密代码
- android之Fragment(官网资料翻译)
- c语言调用asm过程(环境:vc6.0和nasm)
- Android应用程序请求SurfaceFlinger服务创建Surface的过程分析
- Android应用程序与SurfaceFlinger服务之间的共享UI元数据(SharedClient)的创建过程分析
- ubuntu 下GStreamer开发环境搭建
- java调用AES算法产生密钥并加解密文件
- HTTP 状态码
- 堆排序
- 面向对象设计原则汇总
- Android应用程序与SurfaceFlinger服务的连接过程分析
- Android应用程序与SurfaceFlinger服务的关系概述和学习计划
- makefile 自动处理头文件的依赖关系
- 我理解的逻辑地址、线性地址、物理地址和虚拟地址
- C#控件设置技巧积累