比较 sha1 哈希值是否相等的最佳方法
题
我想比较两个 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也会有效。
关于效率,它将取决于实施,但是
另外(可能)如何定义数据和表示。
不隶属于 StackOverflow