Domanda

Voglio confrontare due hash SHA1 per l'uguaglianza.Cosa potrebbe essere il modo più efficace per farlo?Attualmente, sto provando usando MemCMP.Grazie.

È stato utile?

Soluzione

Bene, dal momento che sai già in compilazione, quanto sono grandi i blocchi, potresti fare questo:

#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];
}
.

Ma non prendere il mio consiglio ciecamente, dovresti Misura Qualsiasi soluzione personalizzata contro la soluzione memcmp e utilizzarla solo se ti dà un vantaggio prestazionali significativo.Non sarei nemmeno sorpreso se memcmp era ancora più veloce perché ha fatto qualcosa di estremamente intelligente e sporco.

Altri suggerimenti

Cosa c'è di sbagliato con memcmp()?Devi confrontare ogni byte di entrambi gli hash;memcmp() fallisce rapidamente sulla prima differenza che trova;E memcmp() può essere scritto dagli autori della biblioteca per lavorare in formati chunk che sono buone scelte per la piattaforma.

std::equal sembrerebbe la migliore scommessa, ma anche memcmp funzionerebbe. Per quanto riguarda l'efficienza, dipenderà dall'attuazione, ma Inoltre (possibilmente) come i dati sono definiti e rappresentati.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top