本人记性不是很好,总是忘记些重要信息,特别是密码,很多时间登录都要试好几个密码才成功。所以想到了把
这些容易忘记的重要信息记录到一个文本文件上,再对其加密(不易忘记的密码)。对文件的加密,自己写了个小工具。
下面看下工具的主要设计:
主界面(只注重实用性,所以界面写得很简单)
功能也很简单,就只有加密和解密,选择要文件,输入口令,即可对文件实行加密/解密。
加密原理:
采用字节流读取原文件数据,然后异或一个int值,即用户输入的口令,再写入新的文件。这样新的文件中的数据
就是原文件中的数据通过与口令异或运算后的值,打开查看就显示为乱码。
加密前文件内容:
加密后:
解密原理:
数据A异或B再异或B(即A^B^B),结果还是A,所以可以通过再次异或口令还原文件。
主要代码:
加密方法:
传入一个File对象和加密口令,每读取一个字节,通过异或运算后写入到一个新文件中。
/**
* 把文件按照输入的口令加密
*
* @param file
* 加密的目标文件
* @param code
* 加密口令
*/
public static boolean encrypt(File file, int code) {
if (!validate(file)) {
return false;
}
File tempFile = new File(file.getAbsoluteFile() + SUFFIX);
FileInputStream fis = null;
FileOutputStream fos = null;
try {
fis = new FileInputStream(file);
fos = new FileOutputStream(tempFile);
while (fis.available() > 0) {
fos.write(fis.read() ^ code);
}
} catch (Exception e) {
e.printStackTrace();
return false;
} finally {
closeStream(fis, fos);
}
return true;
}
解密方法:
传入需要解决的文件和口令,同样每读取一个字节,通过异或运算后写入到一个新文件中,得到的新文件
的内容即为加密前文件的内容。
/**
* 把文件按照输入的口令解密
*
* @param file
* 解密的目标文件
* @param code
* 解密口令
*/
public static boolean decrypt(File file, int code) {
if (!validate(file)) {
return false;
}
FileInputStream fis = null;
FileOutputStream fos = null;
try {
String path = file.getAbsolutePath();
if (!path.endsWith(SUFFIX)) {
return false;
}
File newFile = new File(path.substring(0, path.lastIndexOf(SUFFIX)));
fis = new FileInputStream(file);
fos = new FileOutputStream(newFile);
while (fis.available() > 0) {
fos.write(fis.read() ^ code);
}
} catch (Exception e) {
e.printStackTrace();
return false;
} finally {
closeStream(fis, fos);
}
return true;
}本程序只是对文件的一般加密,还有待改进,如果大家有什么意见或建议,欢迎提出。