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).任何帮助将不胜感激.
谢谢
如果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]最终会溢出.
这是用于进位传播,长度*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)