2016-10-24 11 views
0

「暗号文の長さがブロックサイズの倍数ではありません」私は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; 
} 
+0

?暗号化された入力データの長さは、ブロックサイズの正確な倍数(AESの場合は16バイト)ですか? – zaph

+0

プレーンテキスト、キー、ivおよび暗号テキストとは何ですか?私は問題が以前の切り捨てであると推測しています。それはソケット上またはファイル上で発生する可能性があります。 [crypto ++ qt invalidciphertext site:stackoverflow.com](https://www.google.com/search?q=crypto%2B%2B+qt+invalidciphertext+site%3Astackoverflow.com)も参照してください。 – jww

+0

@zaph - jwwあなたはどちらも正しいですが、問題は暗号化に由来し、復号化は実際にはうまくいきます。 –

答えて

0

それは暗号化されたどのように解決の質問(コメントを参照してください)

+0

スタックオーバーフローでは、答えブロックで完全な答えを提供する必要があります。コミュニティはこの答えを全滅させようとしています。あなたが完全な答えを提示できない場合は、(1)問題を「もはや再現できない」*として、または(2)質問を削除してください。 – jww

関連する問題