今天学习了下AES文件加解密
并且写了一个工具类
这个是初始化Cipher并且生成key . 参数type 1(Cipher.DECRYPT_MODE)为加密,2(Cipher.ENCRYPT_MODE)为解密,参数keyStr用于生成key
public static Cipher init(int type,String keyStr){
Cipher cipher=null;
try {
KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
keyGenerator.init(128,new SecureRandom(keyStr.getBytes()));
SecretKey secretKey = keyGenerator.generateKey();
byte[] codeFormat = secretKey.getEncoded();
SecretKeySpec key = new SecretKeySpec(codeFormat, "AES");
cipher=Cipher.getInstance("AES");
// cipher = Cipher.getInstance("AES");
cipher.init(type,key);
} catch (Exception e) {
e.printStackTrace();
}
return cipher;
}
加密方法:传入要加密的文件返回加密后的文件
public static File ASEEncrypt(File file,String keyStr){
File resFile=null;
FileInputStream fis=null;
FileOutputStream fos=null;
try {
resFile=File.createTempFile(file.getName(),"");
fis=new FileInputStream(file);
fos=new FileOutputStream(resFile);
Cipher cipher = init(Cipher.ENCRYPT_MODE, keyStr);
CipherInputStream cin=new CipherInputStream(fis,cipher);
byte[] bts=new byte[1024];
int len=0;
while ((len=cin.read(bts))!=-1){
fos.write(bts,0,len);
fos.flush();
}
cin.close();
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
fis.close();
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return resFile;
}
解密:传入需要解密的文件,返回解密后的文件
public static File ASEDecrypt(File file,String keyStr){
File resFile=null;
FileInputStream fis=null;
FileOutputStream fos=null;
try {
resFile=File.createTempFile(file.getName(),"");
fis=new FileInputStream(file);
fos=new FileOutputStream(resFile);
Cipher cipher = init(Cipher.DECRYPT_MODE, keyStr);
CipherOutputStream cos=new CipherOutputStream(fos,cipher);
byte[] bts=new byte[1024];
int len=0;
while ((len=fis.read(bts))!=-1){
cos.write(bts,0,len);
cos.flush();
}
cos.close();
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
fis.close();
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return resFile;
}