我想比较两个sha1哈希的相等性。什么是最有效的方法呢?目前,我正在尝试使用memcmp。感谢。
答案 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()
可以由库作者编写,以处理作为平台的良好选择的块大小。