视频的加密不像密码加密,这里提供一种方法:
public final class EncryptUtil {
private static final int REVERSE_LENGTH = 100;
/**
* 视频文件加解密
* @param strFile 源文件绝对路径
* @return
*/
public static boolean encryptVideo(String strFile) {
int len = REVERSE_LENGTH;
try {
File f = new File(strFile);
RandomAccessFile raf = new RandomAccessFile(f, "rw");
long totalLen = raf.length();
if (totalLen < REVERSE_LENGTH)
len = (int) totalLen;
FileChannel channel = raf.getChannel();
MappedByteBuffer buffer = channel.map(
FileChannel.MapMode.READ_WRITE, 0, REVERSE_LENGTH);
byte tmp;
for (int i = 0; i < len; ++i) {
byte rawByte = buffer.get(i);
tmp = (byte) (rawByte ^ i);
buffer.put(i, tmp);
}
buffer.force();
buffer.clear();
channel.close();
raf.close();
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
//加密
public static boolean encrypt(Context contet,String fileName){
String fileDir = new File(Environment.getExternalStorageDirectory()
.getAbsolutePath(), contet.getPackageName()).getAbsolutePath();
EncryptUtil.encryptVideo(fileDir+"/"+fileName);
File from =new File(fileDir,fileName) ;
File to=new File(fileDir,"a"+fileName) ;
return from.renameTo(to);
}
//解密
public static boolean decode(Context contet,String fileName){
String fileDir = new File(Environment.getExternalStorageDirectory()
.getAbsolutePath(), contet.getPackageName()).getAbsolutePath();
EncryptUtil.encryptVideo(fileDir+"/"+fileName);
File from =new File(fileDir,fileName) ;
File to=new File(fileDir,fileName.substring(1)) ;
return from.renameTo(to);
}
/*EncryptUtil.encrypt(MainActivity.this,"1503974249022.mp4");*/
}