我想比较两个 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()?您必须比较两个哈希值的每个字节; memcmp() 很快就会在发现的第一个差异上失败;和 memcmp() 可以由库作者编写,以适合平台的块大小工作。

std::equal似乎是最好的选择,但是世纪odicetagcode也会有效。 关于效率,它将取决于实施,但是 另外(可能)如何定义数据和表示。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top