Проблема с целочисленным начальным значением в openssl С++Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Проблема с целочисленным начальным значением в openssl С++

Сообщение Anonymous »

У меня есть код на 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»