有这种库就是没人封装是吧?
没有,这种库一般没有现成的,因为加密算法(也就是怎么对视频加密)的具体实现要自己写。
原理相对来说并不难,也就是按照指定字节读入视频数据,然后加密后再输出为新的文件。
解密的时候再分段解密后,保存到私有目录为临时文件,然后让播放器播放。
具体加密过程,是按照多少字节读取加密,每段怎么偏移或者补全,就需要开发者自行实现。
在VCN中可以结合原生Java代码实现,以下演示对一个MP4视频文件简单的加密与解密。
代码示例:
引用 android.content.Context
引用 java.io.File
引用 java.io.FileInputStream
引用 java.io.FileOutputStream
引用 java.security.SecureRandom
引用 javax.crypto.Cipher
引用 javax.crypto.CipherInputStream
引用 javax.crypto.CipherOutputStream
引用 javax.crypto.spec.IvParameterSpec
引用 javax.crypto.spec.SecretKeySpec
'16字节密钥
变量 KEY 为 字节型[] = "MySecretKey12345".getBytes()
' 加密算法
变量 TRANS 为 文本型 = "AES/CBC/PKCS5Padding"
事件 窗口创建完毕()
结束 事件
' 加密成功后返回真
函数 加密MP4文件(文件地址 为 文本型,加密后写出地址 为 文本型) 为 逻辑型
' 嵌入 java 原生代码加密视频文件
@{
try {
byte[] iv = new byte[16]; new SecureRandom().nextBytes(iv);
Cipher c = Cipher.getInstance(TRANS);
c.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(KEY, "AES"), new IvParameterSpec(iv));
try (FileInputStream in = new FileInputStream(文件地址);
FileOutputStream out = new FileOutputStream(加密后写出地址)) {
out.write(iv);
try (CipherOutputStream cos = new CipherOutputStream(out, c)) {
byte[] buf = new byte[8192]; int len;
while ((len = in.read(buf)) != -1) cos.write(buf, 0, len);
}
}
return true;
} catch (Exception e) { e.printStackTrace(); }
}
返回 假
结束 函数
' 解密成功后返回解密后的文件地址
函数 解密MP4文件(待解密文件地址 为 文本型,解密后写出地址 为 文本型) 为 文本型
@{
try (FileInputStream in = new FileInputStream(待解密文件地址))
{
byte[] iv = new byte[16];
if (in.read(iv) != 16) return null;
Cipher c = Cipher.getInstance(TRANS);
c.init(Cipher.DECRYPT_MODE, new SecretKeySpec(KEY, "AES"), new IvParameterSpec(iv));
try (CipherInputStream cis = new CipherInputStream(in, c);
FileOutputStream out = new FileOutputStream(解密后写出地址)) {
byte[] buf = new byte[8192]; int len;
while ((len = cis.read(buf)) != -1) out.write(buf, 0, len);
}
return 解密后写出地址;
} catch (Exception e) { e.printStackTrace(); }
}
返回 ""
结束 函数
有这种库就是没人封装是吧?
您好,如果是本地加密(即直接在APP内通过算法将视频加密),目前VCN还没有相关支持库。
因为这种加密库一般都需要完全自定义加密算法,同时配套解密功能。