散列函数的openssl实现是位还是字节?

时间:2017-04-11 13:12:28

标签: c hash openssl cryptography

一切都在标题中。我无法找到有关这个具体细节的任何信息,当我去检查实现时(我将在这里发布,你可以在标题md32_common.h中找到它),我无法说出来。 ..

这是HASH_UPDATE函数,它由每个散列函数更新函数调用(即MD5_Update(...))

 //required values: distance between two adjacent rectangles, sizes of rectangles
 sort(rectangles) // from top-left to bottom-right
 foreach (rect in rectangles)
     if (distance between two adjacent rectangles changed)
         get number of grown/shrunk rows/columns
         foreach (rect2 in rectangles below/to the right of rect)
             move rect2 according to the grown/shrunk rows
             if collision is solved after vertical movement
                 continue
             else
                 move horizontally

1 个答案:

答案 0 :(得分:2)

虽然像MD5这样的散列函数通常在比特流上运行,但软件实现通常在字节上运行以避免比特移位的速度损失(并且因为数据通常以字节为单位或在任何情况下以更大的单位处理)。在您发布的代码中,行

l = (c->Nl + (((HASH_LONG) len) << 3)) & 0xffffffffUL;

len参数乘以8(左移3次)将字节数转换为位数,所以我认为可以说这段代码在内部使用了比特,但是希望传递给字节流。