「暗号文の長さがブロックサイズの倍数ではありません」私はAES暗号化を使用して++暗号とバイト配列を暗号化/復号化しようとしてきたが、私はこの例外を得た:暗号++例外:
StreamTransformationFilter: ciphertext length is not a multiple of block size
事があります私はPKCSパディングを使用しているので、これは起こらないはずです。
これは私が問題を抱えている機能です。誰かが私に間違っていることを教えてもらえますか?
void QtAES256::decrypt(const QByteArray& cryptedArray, QByteArray& decryptedArray) const
{
CBC_Mode<AES>::Decryption cbcDecryption(reinterpret_cast<const byte*>(m_Key.constData()),
m_Key.length(),
reinterpret_cast<const byte*>(m_IV.constData()));
byte decryptedResult[MAXSIZE];
ArraySink* arraySink = new ArraySink(decryptedResult, MAXSIZE);
StreamTransformationFilter stfDecryptor(cbcDecryption,
arraySink,
StreamTransformationFilter::PKCS_PADDING);
stfDecryptor.Put(reinterpret_cast<const byte*>(cryptedArray.constData()), cryptedArray.length());
try
{
stfDecryptor.MessageEnd();
}
catch(InvalidCiphertext &e)
{
qDebug() << e.what();
}
decryptedArray = QByteArray(reinterpret_cast<const char*>(decryptedResult), arraySink->TotalPutLength());
delete arraySink;
}
?暗号化された入力データの長さは、ブロックサイズの正確な倍数(AESの場合は16バイト)ですか? – zaph
プレーンテキスト、キー、ivおよび暗号テキストとは何ですか?私は問題が以前の切り捨てであると推測しています。それはソケット上またはファイル上で発生する可能性があります。 [crypto ++ qt invalidciphertext site:stackoverflow.com](https://www.google.com/search?q=crypto%2B%2B+qt+invalidciphertext+site%3Astackoverflow.com)も参照してください。 – jww
@zaph - jwwあなたはどちらも正しいですが、問題は暗号化に由来し、復号化は実際にはうまくいきます。 –