sha1ハッシュを平等に比較するための最良の方法
質問
私は平等のために2つの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()
は、プラットフォームのための良い選択であるチャンクサイズで機能するために、ライブラリーの作者によって書かれることができます。
std::equal
は最良の賭けであるように見えるが、memcmp
も機能します。
効率に関しては、実装に依存するでしょうが、
また、データがどのように定義され表されるかも(場合によって)。
所属していません StackOverflow