2016-06-01 10 views
1

Crpto ++では、パイプラインを使用して入力をハッシュすることが簡単にできます。今INORDERHashVerificationFilterと "message hashまたはMAC not valid"例外

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

メッセージxが同じハッシュ出力を生成し、私はHashVerificationFilterを使用したい与え検証します。私はそれを試みましたが、うまくいきません。誰でも正しい構文を知っていますか?

HashVerificationFilter: message hash or MAC not valid 

答えて

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

あなたにHexEncodeあなたのハッシュ:

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); 
} 

私は出力を得ます。あなたは、フィルタに渡す前に、それをデコードする必要があります。

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

または、エンコーディングフィルタを削除します。

std::string out; 
SHA256 sha; 
StringSource ss(input,true, 
    new HashFilter(sha, 
     new StringSink(out) 
)); 
エンコーダが働いていた六角削除
+0

。私は最初にそれを必要としませんでした。 – itsnevertoobadtoaskforhelp

関連する問題