其实吧,写这个博客也是为了防止自己忘记这些,毕竟,要学的东西太多····
请老鸟放过···
今天,我们来说一下加密和解密,MD5是一种单方向的加密,我们今天来讲下另外一种加密和解密的方式,可以加密文件和解密文件,该方式需要有一点点运算符的基础。
大家可以去参考一下http://blog.csdn.net/xiaochunyong/article/details/7748713
这个博客大神对Java 位运算(移位、位与、或、异或、非)的解释,超详细。
好了,不说废话了,直接上源码。
import java.io.*;
/**
* 加密和解密
* @author mmyhs
*
*/
public class EncAndDec {
private static final int numOfEncAndDec = 1; // 加密解密秘钥 0x99
private static int dataOfFile = 0; // 文件字节内容
public static void main(String[] args) {
File srcFile = new File("C:/Users/mmyhs/Desktop/mysql temp/新建文件夹/emp-dep.txt"); // 初始文件
File encFile = new File("C:/Users/mmyhs/Desktop/mysql temp/新建文件夹/01"); // 加密文件
File decFile = new File("C:/Users/mmyhs/Desktop/mysql temp/新建文件夹/02.txt"); // 解密文件
try {
EncFile(srcFile, encFile); // 加密操作
DecFile(encFile, decFile); // 解密操作
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 加密文件
* @param srcFile 需要加密的文件地址
* @param encFile 加密后的文件存放地址
* @throws Exception
*/
private static void EncFile(File srcFile, File encFile) throws Exception {
if (!srcFile.exists()) {
System.out.println("source file not exixt");
return;
}
if (!encFile.exists()) {
System.out.println("encrypt file created");
encFile.createNewFile();
}
InputStream fis = new FileInputStream(srcFile);
OutputStream fos = new FileOutputStream(encFile);
while ((dataOfFile = fis.read()) > -1) {
// 使用位异或( ^ )来进行加密
fos.write(dataOfFile^numOfEncAndDec);
}
// 关流
fis.close();
fos.flush();
fos.close();
}
/**
* 解密文件
* @param encFile 需要解密的文件地址
* @param decFile 文件解密后存放的地址
* @throws Exception
*/
private static void DecFile(File encFile, File decFile) throws Exception {
if (!encFile.exists()) {
System.out.println("source file not exixt");
return;
}
if (!encFile.exists()) {
System.out.println("encrypt file created");
encFile.createNewFile();
}
InputStream fis = new FileInputStream(encFile);
OutputStream fos = new FileOutputStream(decFile);
while ((dataOfFile = fis.read()) > -1) {
// 使用位异或( ^ )来进行解密
fos.write(dataOfFile^numOfEncAndDec);
}
// 关流
fis.close();
fos.flush();
fos.close();
}
}
“`
有两点需要注意:
1、在调用加密与解密方法时,建议还是使用
try {
} catch (Exception e) {
// TODO: handle exception
}
捕获异常。
2、对用来加密或解密的源文件进行打开(读取)操作之前,最好判断其是否存在,免得造成意想不到的错误和时间的浪费。因为若文件不存在,后续的操作都是没有意义的。
今天就先写到这,总结一下吧。文件加密简单地说就是对数据进行变换,虽然一千种方法可能会有一千种一种结果,但是思想是通用的。关键是加密所采用的算法的难易。