2016-06-01 5 views
1

In Crpto ++ kann man leicht Pipeline verwenden, um eine Eingabe zu hashen. inorderHashVerificationFilter und Ausnahme "Message-Hash oder MAC nicht gültig"

std::string out; 
CryptoPP::SHA256 sha; 
CryptoPP::StringSource ss(input,true, 
          new CryptoPP::HashFilter(sha, 
           new CryptoPP::HexEncoder(
            new CryptoPP::StringSink(out)))); 

nun überprüfen eine Meldung gibt x die gleiche Hash-Ausgabe erzeugt, würde Ich mag HashVerificationFilter verwenden. Ich habe es versucht, aber es funktioniert nicht. Wer kennt die richtige Syntax?

const int flags = CryptoPP::HashVerificationFilter::THROW_EXCEPTION | CryptoPP::HashVerificationFilter::HASH_AT_END; 
CryptoPP::SHA256 sha; 
try 
{ 
    CryptoPP::StringSource ss(input + out, true, 
           new CryptoPP::HashVerificationFilter(sha, NULL , flags)); 
} 
catch(const CryptoPP::Exception& e) 
{ 
    std::cerr << e.what() << std::endl; 
    exit(1); 
} 

ich die Ausgabe:

HashVerificationFilter: message hash or MAC not valid 

Antwort

0
std::string out; 
SHA256 sha; 
StringSource ss(input,true, 
    new HashFilter(sha, 
     new HexEncoder(
      new StringSink(out) 
))); 

Sie HexEncode Ihre Hash. Sie müssen sie entschlüsseln, bevor es dem Filter vorbei:

StringSource ss(input + out, true, 
    new HashVerificationFilter(sha, NULL , flags) 
); 

Oder entfernen Sie die Codierung Filter:

std::string out; 
SHA256 sha; 
StringSource ss(input,true, 
    new HashFilter(sha, 
     new StringSink(out) 
)); 
+0

Entfernen des Hex-Encoder gearbeitet. Ich brauchte es überhaupt nicht. – itsnevertoobadtoaskforhelp

Verwandte Themen