客户端下载文件全流程加密解密方案,加密、解密、使用全流程不暴露密钥、原文,适用场景下载加密的动画文件后解密并在内存中播放,隔绝存储
本项目没有选择非对称加密算法,主要原因是解密时间较长,用在客户端实时使用不太合适,选择对称加密算法除了解密更快以外也是因为在难易度层面解决了密钥容易被破解的问题,当然归根结底这里提供的是整套的解决方案,使用什么算法是你的自由
LOCAL_MODULE 为生成后的so库名字,一会儿会用到
MAX_LEN 设置的是最大解密大小 TARGET_CLASS 设置的是Android代码路径,会做校验 配置AES_IV、AES_KEY与EncryptGUI的AESFileUtil中相同
通过终端输入ndk-build编译为so库
将这个文件拷贝到你的Android项目中,复制完整包名,写入android-aes-jni main.c TARGET_CLASS
System.loadLibrary("你的so库名(lib后 .so前)");
调用crypt方法进行解密即可
修改AESFileUtil内的iv、passwordBytes
依次点击 File ➡️ Project Structure ➡️ Artifacts ➡️ + Jar ➡️ From module ➡️ 设置MainClass找到EncryptGUI,Dir for Meta 目录src后面的删除
配置完成后点击 Build ➡️ Build Artifacts
这里我建议你的jdk版本配置为1.8,如果你使用高版本jdk生成的jar包在别人的电脑上运行会存在兼容性的问题
1.快速启动
Windows 运行 Windows.bat
MacOS 打开终端 cd至本目录 chmod +x MacOS.sh ./MacOS.sh
2.手动启动
MacOS 终端/Windows CMD:java -jar Encrypt.jar (注意路径)
java.security.InvalidKeyException: Illegal key size
以jdk8为例,解决方案:
UnlimitedJCEPolicyJDK8目录下的两个文件
如果安装了JRE,将两个jar文件放到%JRE_HOME%\lib\security目录下覆盖原来的文件
如果安装了JDK,还要将两个jar文件也放到%JDK_HOME%\jre\lib\security目录下覆盖原来文件。
我们可以通过IDA反编译so库拿到密钥,这是非常不安全的,我强烈建议你对so库进行加固处理
市面上有很多对so库进行加固的支持,费用和安全性也不完全相同,请自行选择,当然你也可以联系我
使用Allatori 参考链接https://blog.csdn.net/jianning0925/article/details/107708437
我在VAP提交了代码,你可以使用StreamContainer传入解密出的byteArray直接进行播放,避免了解密到磁盘目录被他人盗用 https://github.com/Tencent/vap/commit/2aee1bd21930f4ce0c9f0ecb56ad2645f392e38f
VincentJin-91 |
panxw |
hexleo |
VAP |