0

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

4

3 回答 3

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因为它做了一些非常聪明和肮脏的事情。

于 2012-03-14T08:41:42.637 回答
2

有什么问题memcmp()?您必须比较两个哈希的每个字节;memcmp()将很快在它发现的第一个差异上失败;并且memcmp()可以由库作者编写,以适合平台的块大小工作。

于 2012-03-14T08:33:59.403 回答
2

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

于 2012-03-14T08:41:19.270 回答