Cryptopp: получить дополненную строку ввода в шифр - PullRequest
0 голосов
/ 09 февраля 2020

В настоящее время я борюсь с библиотекой crypto ++ для c ++. Все, что я хочу, это получить дополненный ввод в шифр. У меня есть следующий фрагмент для шифрования строки «обычный»:

CryptoPP::StringSource(plain, true, new CryptoPP::StreamTransformationFilter(e, new CryptoPP::StringSink(cipher), CryptoPP::BlockPaddingSchemeDef::DEFAULT_PADDING));

, где e - это шифр как:

CryptoPP::CBC_Mode<CryptoPP::SPECK128 >::Encryption e;

. Я могу вывести зашифрованный текст с помощью следующего фрагмента:

CryptoPP::StringSource(cipher, true, new CryptoPP::HexEncoder(new CryptoPP::FileSink(std::cout)));

Что мне нужно, так это получить версию строки "plain" с отступами. Есть ли кто-нибудь, кто может дать мне подсказку, чтобы использовать StreamTransformationFilter, чтобы получить вывод дополненной входной строки?

1 Ответ

0 голосов
/ 09 февраля 2020

Просто используйте CryptoPP::BlockPaddingSchemeDef::NO_PADDING вместо полного удаления BlockPaddingSchemeDef во время расшифровки. Тогда он не будет ожидать заполнения и интерпретирует заполнение как открытый текст.

Заполнение всегда находится в пределах последних 16 байтов (при условии, что размер блока составляет 128 бит), начиная справа. Помните, что возвращаемые байты обычно не являются символами, так как они ниже <<code>0x20, что означает, что они обычно интерпретируются как управляющие символы.

...