解読するストリームがあります。これをブロックに分割し、各ブロックを以下のメソッドに渡します。復号化する必要があるデータは 16 バイトのブロックで暗号化されており、最後のブロックが 16 未満の場合、残りのすべてのバイトはパディングで埋められます。次に、復号化の瞬間に、最後のブロック結果をこれらの追加のパディング バイトを含む値として取得します。異なるパディングを使用できることを考慮して、元のデータの長さを決定してそれのみを返すか、パディングバイトを決定してそれらを削除するにはどうすればよいですか?
void SymmetricAlgorithm::Decrypt(byte* buffer, size_t dataBytesSize) {
MeterFilter meter(new ArraySink(buffer, dataBytesSize));
CBC_Mode<CryptoPP::Rijndael>::Decryption dec(&Key.front(), Key.size(), &IV.front());
StreamTransformationFilter* filter = new StreamTransformationFilter(dec, new Redirector(meter), PKCS_PADDING);
ArraySource(buffer, dataBytesSize, true, filter);
dec.Resynchronize(&IV.front());
}
今、私は PKCS_PADDING と Rijndael を試していますが、一般的には、アルゴリズムとパディングを使用する必要があるかもしれません。