Я пытаюсь реализовать алгоритм AES 256, используя Crypto++ в MS Visual Studio. Операционная система — Windows 7 (64 бит).
Мне нужно предоставить ключ в виде шестнадцатеричной строки, пароль в виде строки и, наконец, я хочу, чтобы зашифрованная строка также была шестнадцатеричной строкой.
Вот что я пытаюсь сделать:
Мой метод шифрования:
std::string encrypt(const std::string &password)
{
std::string plain = password;
std::string ciphertext;
char * decodedKey= "729308A8E815F6A46EB3A8AE6D5463CA7B64A0E2E11BC26A68106FC7697E727E37011";
byte key[ CryptoPP::AES::MAX_KEYLENGTH ], iv[ CryptoPP::AES::BLOCKSIZE ];
CryptoPP::StringSource( reinterpret_cast<const char *>(decodedKey), true,
new CryptoPP::HashFilter(*(new CryptoPP::SHA256), new CryptoPP::ArraySink(key, CryptoPP::AES::MAX_KEYLENGTH)) );
memset( iv, 0x00, CryptoPP::AES::BLOCKSIZE );
CryptoPP::CBC_Mode<CryptoPP::AES>::Encryption Encryptor( key, sizeof(key), iv );
CryptoPP::StringSource( plain, true, new CryptoPP::StreamTransformationFilter( Encryptor,
new CryptoPP::HexEncoder(new CryptoPP::StringSink( ciphertext ) ) ) );
std::cout<<"Ciphertext:" << ciphertext;
return ciphertext;
}
Из основного метода
int main(int argc, char* argv[]) {
encrypt("test");
return 0;
}
В настоящее время я жестко кодирую ключ только для целей отладки. Мой ключ представляет собой шестнадцатеричную строку, как показано ниже. Мне нужно получить зашифрованную строку вывода в виде шестнадцатеричной строки.