比较sha1哈希的最佳方法是平等

时间:2012-03-14 08:31:22

标签: c++ hash equality memcmp

我想比较两个sha1哈希的相等性。什么是最有效的方法呢?目前,我正在尝试使用memcmp。感谢。

2 个答案:

答案 0 :(得分:3)

好吧,既然您已经在编译时知道块的大小,那么您可以这样做:

#include <cstdint>

bool is_same_sha1(const char* p, const char* q)
{
    const std::uint32_t* a = (const std::uint32_t*)p;
    const std::uint32_t* b = (const std::uint32_t*)q;
    return a[0] == b[0] && a[1] == b[1] && a[2] == b[2]
        && a[3] == b[3] && a[4] == b[4];
}

但是不要盲目地接受我的建议,你应该衡量针对memcmp解决方案的任何自定义解决方案,只有在它给你显着的性能优势时才使用它。如果memcmp仍然更快,我甚至不会感到惊讶,因为它做了一些非常聪明和肮脏的事情。

答案 1 :(得分:2)

memcmp()出了什么问题?你必须比较两个哈希的每个字节; memcmp()会在发现的第一个差异上迅速失败;并且memcmp()可以由库作者编写,以处理作为平台的良好选择的块大小。