现在项目里面有一个需求,本项目里面下载的视频和文档都不允许通过其他的播放器播放,在培训机构里面这样的需求很多。防止有人交一份钱,把所有的课件就拷给了别人。这样的事情培训机构肯定是不愿意的。现在我项目里面也出了这么个需求。下面介绍一下我的实现。
文件加解密的流程及原理
1、加密方法:存储文件时,从输入流中截取文件的字节数组,对字节数组进行加密,至于加密的方式和算法就可以视需求而定了,然后把加密后的字节数组写入到文件中,最后生成加密后的文件;
2、解密方法:同加密方法一样,只不过是对字节数据进行解密,最后生成明文文件;
3、加密算法:Android系统本身引入了javax包的Cipher类,这个类里提供了各种各样的通用的加密方式,如AES对称加密等;该程序中有个CipherUtil工具类,里面有一些简单的使用Cipher进行AES加解密的方法;当然最好还是好好学习一下Cipher类的使用;
4、注意事项:
主要代码
/**自定义实现简单的文件加密解密工具 * Created by zhangshuo on 2016/6/28. */ public class CustomFileCipherUtil { /** * 加密后的文件的后缀 */ public static final String CIPHER_TEXT_SUFFIX = ".cipher"; /** * 加解密时以32K个字节为单位进行加解密计算 */ private static final int CIPHER_BUFFER_LENGHT = 32 * 1024; /** * 加密,这里主要是演示加密的原理,没有用什么实际的加密算法 * * @param filePath 明文文件绝对路径 * @return */ public static boolean encrypt(String filePath, CipherListener listener) { try { long startTime = System.currentTimeMillis(); File f = new File(filePath); RandomAccessFile raf = new RandomAccessFile(f, "rw"); long totalLenght = raf.length(); FileChannel channel = raf.getChannel(); long multiples = totalLenght / CIPHER_BUFFER_LENGHT; long remainder = totalLenght % CIPHER_BUFFER_LENGHT; MappedByteBuffer buffer = null; byte tmp; byte rawByte; //先对整除部分加密 for(int i = 0; i
效果如图:
代码就是这么多,都有注释。以后再有这种需求可以直接用。以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。