在开发一个文件管理系统的路上,总有坑在等着你。
今天需求爸爸又开始早早的对我进行“问候”了,加一个文件的加密解密功能。@#¥%,我态度的友好的答应了。
进入正文,加密算法大家应该都不陌生,当然都只是听过,比如信息安全课上那花里胡哨的一堆AES、DES、md5等等。具体的算法,早已忘的一干二净,但是现在做事网上的工具类已经很发达了,何必自己造轮子,耗时耗力,又好的主要我不会。
网上可以看到很多加密算法,这里顺便推荐给大家一个网址,别问我是什么,点它 ,你会谢谢我的。
然后我就去问需求爸爸要什么算法,他说最简单的就行,只有一个要求解密要快。好勒,base64。具体它是什么,什么原理我就不浪费时间了。具体说说我是怎么实现的。
首先在上面提供的工具类里面就有base64编码解码,(刚刚不是在说加密解密吗),我对加密的理解就是:一切让你无法直观看见明文的操作都可以称为加密,比如ABCD->BCDA。
首先我们要加密肯得有一个源文件吧,我们来看看前面提供的工具类,
String encodeString = Base64.encode(file);
saveFile(encodeString,filePath);
可以找到一个传入参数是File的,返回参数是String的方法,就是它了,首先我们将这个文件Base64编码后变成String,然后再用saveFile方法,把它保存成文件。
// String保存成文件
private static void saveFile(String content,String path) {
FileWriter fwriter = null;
try {
fwriter = new FileWriter(path);
fwriter.write(content);
} catch (IOException ex) {
ex.printStackTrace();
} finally {
try {
fwriter.flush();
fwriter.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
这样就成功的加密了,可以输出或者打开文件看一看。
然后在需要预览的时候就得吧它解密。也很简单
String decode = readFileContent(file);
File file = Base64.decodeToFile(decode,filePath);
首先把这个被加密的文件先以String的形式读出来,然后继续用刚刚那个工具类将这个String解码成文件。filepath就是你存放这个明文文件的地址,记得有需要的话预览完要把它删掉哦。
public static String readFileContent(String fileName) {
File file = FileUtil.getFile(fileName);
Log.e("filetest", file.getPath() );
BufferedReader reader = null;
StringBuffer sbf = new StringBuffer();
try {
reader = new BufferedReader(new FileReader(file));
String tempStr;
while ((tempStr = reader.readLine()) != null) {
sbf.append(tempStr);
}
reader.close();
return sbf.toString();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
return sbf.toString();
}