java调用AES算法产生密钥并加解密文件
2012-10-07 11:21
344 查看
最近在做一个项目,要用到数据加密算法,所以就看了下《java加密与解密的艺术》这本书,最后就参考了下AES加密算法来加密文件,一是它加密标准高、密钥建立时间短、灵敏性好、内存需求低,二是因为javaAPI已经自带了AES算法,用起来很方便顺手,当然,这个还不算,密钥的产生还调用了Base64算法对AES产生的密钥进行了二次加密,确保密钥的安全可靠,大家有兴趣的话可以去看看《java加密与解密的艺术》一书,这里我贴上代码供参考:
注:Base64是需要加入commons-codec-1.4.jar以上的包的,所以需要大家去下一个!这个算法加密的效率还是很可观的,如果有可以改进的地方望大家多赐教啊!
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 delphi aes 加密与解密文件兼容算法
- JAVA AES字符串解密算法可读取文件
- 全面解决.Net与Java互通时的RSA加解密问题,使用PEM格式的密钥文件
- AES加解密算法在Android中的应用及Android4.2以上版本调用问题
- AES加解密算法在Android中的应用及Android4.2以上版本调用问题
- java 下的 AES org.bouncycastle.crypto 包加密解密算法示例
- Java AES文件加解密
- C#与java中的AES加解密互解算法
- Java DES算法加密解密与AES密码算法
- c++ mk文件出错Jni调用产生java.lang.UnsatisfiedLinkError错误解决方法
- javaAES加密解密32位密钥
- Java AES加密解密算法
- eclipse JAVA实现AES的加密和解密算法
- Java加密解密算法-AES加密解密
- 【Java】Java的AES的算法实现(增加解密算法,优化域算法)
- java实现AES加密和解密算法
- Java 文件加密传输与解密算法终极产品版(三)
- 对称加密算法AES------使用AES算法对文件进行加密/解密的操作(JAVA)
- Linux下python调用C++接口实现图片及文件的AES加解密
- php与java通用AES加密解密算法