MD5代码覆盖率

daz*_*ler 1 c++ md5 code-coverage

我目前正在实现基于MD5哈希算法的RSA数据安全代码,在UpdateData方法中有一节内容如下:

mCount[0] += (length << 3);

if (mCount[0] < (length << 3))
{
    mCount[1]++;
}
Run Code Online (Sandbox Code Playgroud)

我现在正在尝试理解if语句如何评估为true(mCount [0]值初始化为0).任何帮助将不胜感激.

谢谢

Bri*_*ndy 8

如果mCount [0]变量溢出,可能会发生这种情况.

unsigned int i = 4294967295;//2^32-1
unsigned int j = 1;
i += j;
assert(i < j);
Run Code Online (Sandbox Code Playgroud)

您提到的代码块可能会多次调用,具体取决于要处理的数据量.所以mCount [0]最终会溢出.


Eri*_*lle 5

这是用于进位传播,长度*8的总和存储在两个32位字中(这里,mCount可能是无符号整数的数组)mCount [1]:mCount [0].

lo += a
if (lo < a) hi++; // true if overflow occurs: lo + a >= 2^32
Run Code Online (Sandbox Code Playgroud)

相当于64位操作:

(hi:lo) += (0:a)
Run Code Online (Sandbox Code Playgroud)