私は現在私自身のためにパスワードマネージャーに取り組んでおり、データベースの暗号化プロセスは、テストベクタとの結果を完全によく比較して動作しています。復号化中に間違ったキーを使用すると「ブロックパディング」の例外が予想されますか?
暗号文を復号化するには、Web上で見つかったコードを使用しようとしていますが、プログラムに誤った復号鍵を渡すと例外が発生します。私は、この例外をキャッチするのが安全かどうか、それが間違っているかどうかを知りたかったのです。
私が持っているコードは次のとおりです。
derivedKeyはPBKDF2によって生成unsigned char*
ある
CryptoPP::CBC_Mode<CryptoPP::AES>::Decryption aesDecryption;
aesDecryption.SetKeyWithIV(derivedKey, sizeof(derivedKey), initVector);
// The StreamTransformationFilter removes
// padding as required.
CryptoPP::StringSource ss(encryptedString, true,
new CryptoPP::StreamTransformationFilter(aesDecryption,
new CryptoPP::StringSink(decryptedData)
) // StreamTransformationFilter
); // StringSource
、initVector
もunsigned char*
で、encryptedString
は私が解読したいとdecryptedData
を置くための文字列であるデータを含む文字列であります解読されたデータ
このコードを右のderivedKey
を使用して実行すると、すべて正常に動作します。私は間違っderivedKey
を使用してみた場合でも、私は暗号++から次のエラーを取得する:
StreamTransformationFilter: invalid PKCS #7 block padding found
私はStreamTransformationFitler
に指定された鍵が正しいものでない場合、これは正常であるかどうかを知りたい場合、またはしたいですこのエラーは他の何かから発生する可能性があります。
はいそうです。この動作は、SSL/TLS(およびその他のプロトコルとスキーム)のパディングの基本です。認証された暗号化モードを使用する必要があります。 Crypto ++ wikiの[Authenticated Encryption](https://www.cryptopp.com/wiki/Authenticated_Encryption)も参照してください。 – jww