Не могу понять, почему я получаю кажущийся случайным вывод из декодера Crypto ++ RC2. Вход всегда один и тот же, но выход всегда отличается.Получение случайного вывода из Crypto ++
const char * cipher ("o4hk9p+a3+XlPg3qzrsq5PGhhYsn+7oP9R4j9Yh7hp08iMnNwZQnAUrZj6DWr37A4T+lEBDMo8wFlxliuZvrZ9tOXeaTR8/lUO6fXm6NQpa5P5aQmQLAsmu+eI4gaREvZWdS0LmFxn8+zkbgN/zN23x/sYqIzcHU");
int keylen (64);
unsigned char keyText[] = { 0x1a, 0x1d, 0xc9, 0x1c, 0x90, 0x73, 0x25, 0xc6, 0x92, 0x71, 0xdd, 0xf0, 0xc9, 0x44, 0xbc, 0x72, 0x00 };
std::string key((char*)keyText);
std::string data;
CryptoPP::RC2Decryption rc2(reinterpret_cast<const byte *>(key.c_str()), keylen);
CryptoPP::ECB_Mode_ExternalCipher::Decryption rc2Ecb(rc2);
CryptoPP::StringSource
(cipher
, true
, new CryptoPP::Base64Decoder
(new CryptoPP::StreamTransformationFilter
(rc2Ecb
, new CryptoPP::StringSink(data)
, CryptoPP::BlockPaddingSchemeDef::NO_PADDING
)
)
);
std::cout << data << '\n';
Пожалуйста, сделайте полный пример: нет ничего явно неправильного в том, что вы показываете нам, поэтому я полагаю, что проблема заключается в том, что вы * не * показываете нам (то есть, где ключ, ключ и шифр исходят из ?) –
Это просто константы, определенные непосредственно выше, и они правильно расшифровываются на Java с помощью RC2/ECB/NOPADDING. –
А, я вижу, вы сами это поняли. Как вы видите, константа может быть важной: не было очевидно, была ли keylen длиной «ключа» или (как это было) эффективной длины ключа. –