Как расшифровать строковые данные в C ++ с Crypto ++, где исходная строка шифрована в Python с Pycrypto
Вопрос
Я только что зашифровал строку данных с Pycrypto, но не знаю, как расшифровать ее в Crypto ++. Кто -нибудь может помочь с примером кода дешифрования в C ++ с Crypto ++? Вот мой код Python:
key = '0123456789abcdef'
data = "aaaaaaaaaaaaaaaa"
iv = ''.join(chr(random.randint(0, 0xFF)) for i in range(16))
encryptor = AES.new(key, AES.MODE_CBC, iv)
enc = encryptor.encrypt(data)
Решение
Этот код из примера от 2005 года, но он должен дать вам хорошую отправную точку:
std::string ciphertext = "..."; // what Python encryption produces
std::string decryptedtext;
byte key[ CryptoPP::AES::DEFAULT_KEYLENGTH ], iv[ CryptoPP::AES::BLOCKSIZE ];
// populate key and iv with the correct values
CryptoPP::AES::Decryption aesDecryption(key, CryptoPP::AES::DEFAULT_KEYLENGTH);
CryptoPP::CBC_Mode_ExternalCipher::Decryption cbcDecryption( aesDecryption, iv );
CryptoPP::StreamTransformationFilter stfDecryptor(cbcDecryption, new CryptoPP::StringSink( decryptedtext ) );
stfDecryptor.Put( reinterpret_cast<const unsigned char*>( ciphertext.c_str() ), ciphertext.size() );
stfDecryptor.MessageEnd();
// it's all in decryptedText now
Другие советы
тот же подход, что и @Jon, немного упрощенный
std::string ciphertext = "..."; // what Python encryption produces
std::string decryptedtext;
byte key[ CryptoPP::AES::DEFAULT_KEYLENGTH ], iv[ CryptoPP::AES::BLOCKSIZE ];
// populate key and iv with the correct values
CryptoPP::CBC_Mode< CryptoPP::AES >::Decryption decryptor;
decryptor.SetKeyWithIV(key, sizeof(key), iv);
CryptoPP::StringSource(ciphertext, true,
new CryptoPP::StreamTransformationFilter( decryptor,
new CryptoPP::StringSink( decryptedtext )
)
);
А true
параметр к CryptoPP::StringSource
означает «потреблять весь ввод»
Обратите внимание, что (очевидно) вам нужен ваш Decryptor C ++, чтобы узнать IV, который вы использовали для шифрования. Поскольку вы генерируете случайный IV в Python, популярная техника состоит в том, чтобы подготовить IV к зашифрованному тексту.
Не связан с StackOverflow