質問

私は平等のために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も機能します。 効率に関しては、実装に依存するでしょうが、 また、データがどのように定義され表されるかも(場合によって)。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top