admin管理员组文章数量:1516870
最近开发一个手机上的类似于保险箱的功能,就是把选择某个文件然后这个文件就加密起来了,在普通的文件管理器中无法显示。
下面简单介绍下思路,在做这个功能之前,参考很多Android市场上的成熟产品,(
不过话说起来,如果不会创造,那么请模仿。
思路:
1、选择一个文件
2、选择一种加密算法(可以选择加密级别),来实现加密,复制文件
3、删除原先的文件
关于加密算法,现在技术这么发到,有很多的,比如什么md5,des等,不过我们这边需要选择的是一种可逆的加密算法。
关于加密级别问题,其实是故弄玄虚,我只是简单想了下有三种,(从别的apk上参考的,然后估计思路是这样)。
1、直接重命名,去掉文件后缀,比如《开发宝典.pdf》,一看就是个pdf文件,如果换成《alfjafajfaldcmva》,这样就很难看出来的,如果在window上选择用某方式打开,还是可以打开的,当然这个是简单的级别。
2、选择一个可逆加密算法,密码固定,这样算是比较安全的,在级别1的基础上,添加了密码,在修改和查看前,必须先解密。
3、让用户自己设置一个密码,这样用户在解密前,必须先输入密码才可以。
关于加密算法,肯定想到什么加多少,减多少,与运算,或运算,自定义移动算法。算了吧,咱们也不是设计算法的人。而且Java中也自带中加密算法,Java程序员是幸福的。
下面是级别2加密的核心算法,其中密码是"cnmmlgb!",唉,说粗话了,
void encode(File enfile, File defile) throws Exception{
String Algorithm = "DES"; // 定义 加密算法,可用DES,DESede,Blowfish
byte[] key = "cnmmlgb!".getBytes(); //字节数必须是8的整数倍
// 密码(对称)密钥(SecretKey继承(key))
// 根据给定的字节数组构造一个密钥。
SecretKey deskey = new SecretKeySpec(key, Algorithm);
// 生成一个实现指定转换的 Cipher 对象。Cipher对象实际完成加解密操作
Cipher c = Cipher.getInstance(Algorithm);
// 用密钥初始化此 cipher
c.init(Cipher.ENCRYPT_MODE, deskey);
byte[] buffer = new byte[100 * 1024];
FileInputStream in = new FileInputStream(enfile);
OutputStream out = new FileOutputStream(defile);
CipherInputStream cin = new CipherInputStream(in, c);
int i;
while ((i = cin.read(buffer)) != -1) {
out.write(buffer, 0, i);
}
out.close();
cin.close();
}关于解密,基本上同上面代码。CipherInputStream,CipheroutputStream这2个类就是干这个事情的。以上就是简单的文件加密功能,不过还需二外的配置,就是原始文件和加密后的文件的映射问题,不过这个都是很简单的,简单设计个sqlite数据库就好了。
还有在Android中,一个.开头的默认隐藏文件,所以可以把加密后的文件放在隐藏文件夹里面。不过为了防止用户误操作。添加提示文件,比如“重要文件请勿删除”等。不过这个还是比较尴尬的事情,万一用户失误操作,就完蛋,可以考虑使用网盘,同步到服务器上。
先写到这里吧,关于同步网盘问题,以后在实现吧。
打完手工,下班了,周六加班,伤不起啊。
版权声明:本文标题:揭秘!在CSDN上学习Flash中心文件加密技巧 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.betaflare.com/biancheng/1771672508a3268175.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。


发表评论