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)
修正后的代码在下方
第二处是函数findPaddingIndex
这个函数是从数据尾部找到padding字符。之前是通过strlen来进行的
但是由于out这块数据是严格按照inputLength来大小分配的,所以导致最后不存在0结尾,会溢出。
而且这个函数的入参,也是定义的uint8_t*,类型上也不严谨。所以,对这个函数进行了修改。
修改参数为
int findPaddingIndex(uint8_t * out, int len);
len为out的真实大小,在有外层调用的时候传入。
实现代码
thanx for your issue.
创建了一个pull request
已经合入。