BruceWind / AESJniEncrypt

🛡 Make safest code in Android. (基于libsodium实现chacha20算法,key在native中,防止被二次打包){长期维护,请star,勿fork}

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

aes.c中密钥扩展的部分多次重复执行

Hypocrisybbq opened this issue · comments

这几天仔细看了aes.c的源码部分.其中密钥的扩展放在了加密的循环中,没有一段明文进行加密,就会进行一次密钥的扩展,如果需要加密的明文稍微长,有一大段的计算浪费在了这个重复的过程.比如160字符的数组就要进行1次有效的密钥扩展和16次多余的密钥扩展

推荐把密钥的扩展放在加密的循环外面

很感谢项目给与我的参考

commented

你好! 刚我仔细看了一下代码,这里因为是key是static存在native内存里,考虑到多线程调用,key必须每次执行先进行扩展,后面我尝试,非static key再处理.

哦哦.突然想起来你的key是这样存的,是不是可以换个思路,把apk的加密code作为密钥,然后把真正的密钥加密后的密文作为需要解密的密钥,这样密钥就不用存本地了,而且没有正确的签名也无法获得真正的密钥

commented

加密的key存在这个方法里 JNIEncrypt.c#getKey(),

只不过在执行的时候,用了一个非常傻的static.
The fucking code!!!

你可以尝试修改这个方法 使用c 反射java的方式来,获取apk的加密code作为密钥.

注: 这里一定用C写获取key的方法.

commented

我目前的代码是考虑到跨平台,多平台使用同一个key的需求,
而你的考虑可能是特定的需求,只要看懂了代码,你可以依据你的需求进行修改.

哦哦,这样,我这边已经修改好了,非常感谢您的代码

commented

那我关闭这个issues了啊 ?