BruceWind / AESJniEncrypt

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

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

AES_128_ECB_PKCS5Padding_Decrypt bug修复

larry19840909 opened this issue · comments

hi,几个月前我提供了一份关于加解密优化的代码。

最近我发现在解密的时候由于逻辑不严谨,会导致解密出来的数据出问题。

主要是有两处。

第一处是函数AES_128_ECB_PKCS5Padding_Decrypt

在计算base64 decode之后的输出长度时,采用的是估算。

const size_t inputLength= (strlen(in) / 4) * 3;

但是这个时候没有考虑到外部传入的base64字符串是否已经在尾部添加了“=”。

因为“=”是 base64 encode时候做的padding,如果此时用这个长度来计算就会变多,导致后续去除我们自己添加的padding的时候,就会出错。

因此,这个长度直接采用下面的函数获取真实长度

b64_decode_ex(in,strlen(in), &inputLength)

修正后的代码在下方

https://pastebin.com/yUdpwrvx

第二处是函数findPaddingIndex

这个函数是从数据尾部找到padding字符。之前是通过strlen来进行的

但是由于out这块数据是严格按照inputLength来大小分配的,所以导致最后不存在0结尾,会溢出。

而且这个函数的入参,也是定义的uint8_t*,类型上也不严谨。所以,对这个函数进行了修改。

修改参数为

int findPaddingIndex(uint8_t * out, int len);

len为out的真实大小,在有外层调用的时候传入。

实现代码

https://pastebin.com/8cf6FZ1z

commented

可以提一个pull request 给我吗?这里教程
另外,这是个精简版aes算法,我准备停止更新,现在开始用Crypto++在这里

commented

thanx for your issue.

创建了一个pull request

commented

已经合入。