zoukankan      html  css  js  c++  java
  • 文件加密

    最近开发一个手机上的类似于保险箱的功能,就是把选择某个文件然后这个文件就加密起来了,在普通的文件管理器中无法显示。

    下面简单介绍下思路,在做这个功能之前,参考很多Android市场上的成熟产品,(大笑,我表示中国人的模仿能力实在太强大了,这个也是教育的悲哀啊,委屈)。


    不过话说起来,如果不会创造,那么请模仿。大笑


    思路:

    1、选择一个文件

    2、选择一种加密算法(可以选择加密级别),来实现加密,复制文件

    3、删除原先的文件


    关于加密算法,现在技术这么发到,有很多的,比如什么md5,des等,不过我们这边需要选择的是一种可逆的加密算法。

    关于加密级别问题,其实是故弄玄虚,我只是简单想了下有三种,(从别的apk上参考的,然后估计思路是这样)。

    1、直接重命名,去掉文件后缀,比如《开发宝典.pdf》,一看就是个pdf文件,如果换成《alfjafajfaldcmva》,这样就很难看出来的,如果在window上选择用某方式打开,还是可以打开的,当然这个是简单的级别。

    2、选择一个可逆加密算法,密码固定,这样算是比较安全的,在级别1的基础上,添加了密码,在修改和查看前,必须先解密。

    3、让用户自己设置一个密码,这样用户在解密前,必须先输入密码才可以。


    关于加密算法,肯定想到什么加多少,减多少,与运算,或运算,自定义移动算法。算了吧,咱们也不是设计算法的人。而且Java中也自带中加密算法,Java程序员是幸福的。大笑

    下面是级别2加密的核心算法,其中密码是"cnmmlgb!",唉,说粗话了,偷笑。这样级别就很容易实现了,替换下密码就好了,级别就不介绍了,大家都懂的。不够文件的命名可以使用Java随机生成一个字符串来实现。

    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中,一个.开头的默认隐藏文件,所以可以把加密后的文件放在隐藏文件夹里面。不过为了防止用户误操作。添加提示文件,比如“重要文件请勿删除”等。不过这个还是比较尴尬的事情,万一用户失误操作,就完蛋,可以考虑使用网盘,同步到服务器上。


    先写到这里吧,关于同步网盘问题,以后在实现吧。

    打完手工,下班了,周六加班,伤不起啊。快哭了


  • 相关阅读:
    CSS3 选择器——伪类选择器详细讲解
    关于endnote与word或wps关联的问题
    高通量测序中,reads、contigs、scaffold之间的联系
    转录组中 实验设计 的相关问题
    RNA-Seq分析软件HTSeq的安装
    bash下特殊字符的含义
    常见的测序名词解释
    RNA-seq数据分析注意事项
    RNASeq中常见的分析流程
    WGS/WES/RNAseq/CHIP-seq之间的差别
  • 原文地址:https://www.cnblogs.com/liushuibufu/p/3253605.html
Copyright © 2011-2022 走看看