我有要解密的流。我将它分成块并将每个块传递给下面的方法。我需要解密的数据由 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,但总的来说,我可能需要使用任何算法和任何填充。