У меня есть код на python, и я хочу перевести его на c++ с помощью openssl, но не могу справиться со счетчиком, так как в openssl нельзя передать значение iv с типом int, я не понимаю, как это можно реализовать на С++. Вот код Python.
counter = Counter.new(128, initial_value=int.from_bytes(bytes.fromhex(salt), byteorder="big"))
aes_ctr = AES.new(key, AES.MODE_CTR,counter=counter)
decrypted_data = aes_ctr.decrypt(password_cipher_text)
Я попробовал преобразовать шестнадцатеричное число в int256, а затем записать в iv, но это не сработало.
Вот код C++.
Вот код C++, что нужно я использую для расшифровки.
intx::uint256 initialValue = 0;
std::memcpy(&initialValue, salt.data(), 16);
unsigned char counter[16];
for (int i = 0; i < 16; ++i) {
counter = (initialValue >> (120 - i * 8)) & 0xFF;
}
memset(&counter[8], 0, 8);
std::string res;
aes_128_ctr_decrypt(password_cipher, key, iv, res);
...
bool aes_decrypt(const EVP_CIPHER* type, const std::string& in, const std::string& key, const std::string& iv, std::string& result) {
EVP_CIPHER_CTX* ctx;
int length;
if (!(ctx = EVP_CIPHER_CTX_new()))
return false;
if (1 != EVP_DecryptInit_ex(ctx, type, nullptr, reinterpret_cast(key.c_str()), reinterpret_cast(iv.c_str()))) {
EVP_CIPHER_CTX_free(ctx);
return false;
}
result.assign(std::string(in.size() + EVP_CIPHER_block_size(type), 0));
if (1 != EVP_DecryptUpdate(ctx, reinterpret_cast(result.data()), &length, reinterpret_cast(in.c_str()), in.size())) {
EVP_CIPHER_CTX_free(ctx);
return false;
}
const int partial_length = length;
if (1 != EVP_DecryptFinal_ex(ctx, (unsigned char*) in.data() + length, &length)) {
EVP_CIPHER_CTX_free(ctx);
return false;
}
result.resize(partial_length + length);
EVP_CIPHER_CTX_free(ctx);
return true;
}
Подробнее здесь: https://stackoverflow.com/questions/786 ... -openssl-c
Проблема с целочисленным начальным значением в openssl С++ ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
CRC 16 бит (полиномиальное 0x1021) Расчет CCITT с начальным значением 0x0000
Anonymous » » в форуме C# - 0 Ответы
- 6 Просмотры
-
Последнее сообщение Anonymous
-