package com.example.test;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.security.Key;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import javax.crypto.Cipher;
import javax.crypto.CipherInputStream;
import javax.crypto.CipherOutputStream;
import javax.crypto.KeyGenerator;
public class FileDeEncrypt {
private Key desKey;
public FileDeEncrypt(String keyStr) {
genKey(keyStr);
}
private void genKey(String keyStr) {
try {
KeyGenerator keyGenerator = KeyGenerator.getInstance("DES");
keyGenerator.init(new SecureRandom(keyStr.getBytes()));
desKey = keyGenerator.generateKey();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
}
/**
* 文件file進行加密並保存目標文件destFile中
*
* @param file 要加密的文件 如c:/test/srcFile.txt
* @param destFile 加密後存放的文件名 如c:/加密後文件.txt
*/
public void encryptFile(String file, String destFile) {
InputStream is = null;
OutputStream out = null;
CipherInputStream cis = null;
try {
Cipher cipher = Cipher.getInstance("DES");
cipher.init(Cipher.ENCRYPT_MODE, desKey);
is = new FileInputStream(file);
out = new FileOutputStream(destFile);
cis = new CipherInputStream(is, cipher);
byte[] buffer = new byte[1024];
int r;
while ((r = cis.read(buffer)) > 0) {
out.write(buffer, 0, r);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
cis.close();
out.close();
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* 文件採用DES算法解密文件
*
* @param file 已加密的文件 如c:/加密後文件.txt * @param destFile 解密後存放的文件名 如c:/
* test/解密後文件.txt
*/
public void decryptFile(String file, String dest) {
InputStream is = null;
OutputStream out = null;
CipherOutputStream cos = null;
try {
Cipher cipher = Cipher.getInstance("DES");
cipher.init(Cipher.DECRYPT_MODE, desKey);
is = new FileInputStream(file);
out = new FileOutputStream(dest);
cos = new CipherOutputStream(out, cipher);
byte[] buffer = new byte[1024];
int r;
while ((r = is.read(buffer)) >= 0) {
System.out.println();
cos.write(buffer, 0, r);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
cos.close();
out.close();
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* 解密文件成字符串
*
* @param fileName
* @return
*/
public String decryptFile(String fileName) {
InputStream is = null;
CipherInputStream cis = null;
BufferedReader buReader = null;
try {
Cipher cipherDecrypt = Cipher.getInstance("DES");
cipherDecrypt.init(Cipher.DECRYPT_MODE, desKey);
is = new FileInputStream(fileName);
cis = new CipherInputStream(is, cipherDecrypt);
buReader = new BufferedReader(new InputStreamReader(cis));
StringBuffer buffer = new StringBuffer();
String line = "";
while ((line = buReader.readLine()) != null) {
buffer.append(line);
}
is.close();
cis.close();
buReader.close();
return buffer.toString();
} catch (Exception e) {
e.printStackTrace();
return null;
} finally {
try {
is.close();
cis.close();
buReader.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
/**
* 解密文件成字符串
*
* @param is
* @return
*/
public String decryptFile(InputStream is) {
CipherInputStream cis = null;
BufferedReader buReader = null;
try {
Cipher cipherDecrypt = Cipher.getInstance("DES");
cipherDecrypt.init(Cipher.DECRYPT_MODE, desKey);
cis = new CipherInputStream(is, cipherDecrypt);
buReader = new BufferedReader(new InputStreamReader(cis));
StringBuffer buffer = new StringBuffer();
String line = "";
while ((line = buReader.readLine()) != null) {
buffer.append(line);
}
is.close();
cis.close();
buReader.close();
return buffer.toString();
} catch (Exception e) {
e.printStackTrace();
return null;
} finally {
try {
cis.close();
buReader.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
FileDeEncrypt fdn=new FileDeEncrypt("test");
fdn.encryptFile("e:/publicKey.keystore", "e:/r解密.keystore"); // 加密
fdn.decryptFile("e:/r解密.keystore", "e:/publicKey11.keystore"); // 解密
System.out.println(fdn.decryptFile("e:/r解密.keystore"));
}
}
採用Cipher Des對文件加密、解密
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.