比较sha1哈希是否相等的最佳方式

Best way to compare sha1 hashes for equality

本文关键字:最佳 方式 sha1 哈希 是否 比较      更新时间:2023-10-16

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

好吧,因为在编译时你已经知道块有多大了,所以你可以这样做:

#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速度更快,我甚至不会感到惊讶,因为它做了一些非常聪明和肮脏的事情。

memcmp()出了什么问题?你必须比较两个散列的每个字节;CCD_ 4将在其发现的第一个差异上迅速失败;和CCD_ 5可以由库作者编写以在对于平台来说是好的选择的块大小中工作。

std::equal似乎是最好的选择,但memcmp也可以。关于效率,这将取决于实施情况,但是以及(可能)如何定义和表示数据。