aes.c中密钥扩展的部分多次重复执行
Hypocrisybbq opened this issue · comments
陈某某 commented
这几天仔细看了aes.c的源码部分.其中密钥的扩展放在了加密的循环中,没有一段明文进行加密,就会进行一次密钥的扩展,如果需要加密的明文稍微长,有一大段的计算浪费在了这个重复的过程.比如160字符的数组就要进行1次有效的密钥扩展和16次多余的密钥扩展
陈某某 commented
推荐把密钥的扩展放在加密的循环外面
陈某某 commented
很感谢项目给与我的参考
Bruce commented
你好! 刚我仔细看了一下代码,这里因为是key是static存在native内存里,考虑到多线程调用,key必须每次执行先进行扩展,后面我尝试,非static key再处理.
陈某某 commented
哦哦.突然想起来你的key是这样存的,是不是可以换个思路,把apk的加密code作为密钥,然后把真正的密钥加密后的密文作为需要解密的密钥,这样密钥就不用存本地了,而且没有正确的签名也无法获得真正的密钥
Bruce commented
加密的key存在这个方法里 JNIEncrypt.c#getKey(),
只不过在执行的时候,用了一个非常傻的static.
The fucking code!!!
你可以尝试修改这个方法 使用c 反射java的方式来,获取apk的加密code作为密钥.
注: 这里一定用C写获取key的方法.
Bruce commented
我目前的代码是考虑到跨平台,多平台使用同一个key的需求,
而你的考虑可能是特定的需求,只要看懂了代码,你可以依据你的需求进行修改.
陈某某 commented
哦哦,这样,我这边已经修改好了,非常感谢您的代码
Bruce commented
那我关闭这个issues了啊 ?
陈某某 commented
嗯