我想比较两个 sha1 哈希是否相等。最有效的方法是什么?目前,我正在尝试使用 memcmp。谢谢。
问问题
1988 次
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 回答