В чем разница между объектом в шаблонном режиме и объектом внешнего шифра?

Как и в названии, я ищуразница в библиотеке cryptopp междуэта декларация:

CBC_Mode<AES>::Decryption 
cbcDecryption.SetKeyWithIV(key, AES::DEFAULT_KEYLENGTH, iv);

а такжеэтот:

AES::Decryption aesDecryption(key, AES::DEFAULT_KEYLENGTH);
CBC_Mode_ExternalCipher::Decryption cbcDecryption( aesDecryption, iv );

Более того, я не могу понять, почему с этим:

AES::Decryption aesDecryption(key, AES::DEFAULT_KEYLENGTH);
CBC_Mode_ExternalCipher::Decryption cbcDecryption( aesDecryption, iv );

StreamTransformationFilter stfDecryptor(
    cbcDecryption,
    new StringSink( recoveredtext )
);

stfDecryptor.Put( reinterpret_cast<const unsigned char*>( ciphertext.c_str() ), ciphertext.size() );
stfDecryptor.MessageEnd();

все отлично работает при использовании шаблонного режима у меня эта ошибка во времявремя выполнения:

AES128CBC: /usr/local/include/cryptopp/misc.h:304: void CryptoPP::memcpy_s(void*, size_t, const void*, size_t): Assertion `dest != __null' failed.
Aborted (core dumped)

Не должно быть то же самое?

Я смотрел наэтот но я не очень хорошо понимал разницу и, перебирая сеть, не мог найти ответ на свою проблему.

Ответы на вопрос(1)

Ваш ответ на вопрос