Как проверить правильность ключа при расшифровке? Здравствуйте, пользуюсь алгоритмом Blowfish в режиме CFB для шифровки/расшифровки сообщений, как при расшифровке проверить правильность ключа и вектора инициализации?
Язык программирования: C++
Библиотека: OpenSSL
Заранее благодарю за помощь!

21 Авг 2019 в 07:12
192 +1
0
Ответы
1

Для проверки правильности ключа и вектора инициализации при расшифровке сообщения с помощью алгоритма Blowfish в режиме CFB с использованием библиотеки OpenSSL вам нужно выполнить следующие шаги:

Убедитесь, что вы правильно загрузили ключ и вектор инициализации с помощью функций EVP_DecryptInit_ex и EVP_CIPHER_CTX_set_key.

При вызове функции EVP_DecryptUpdate для расшифровки блока данных передайте корректные параметры:

указатель на структуру EVP_CIPHER_CTX, которая содержит информацию о ключе, векторе инициализации и других параметрах шифрования;указатель на буфер, в который будет записан расшифрованный блок данных;указатель на буфер с зашифрованным блоком данных;размер блока данных для расшифровки.

После вызова функции EVP_DecryptUpdate проверьте возвращенное значение, которое указывает на успешность операции расшифровки. Если значение меньше 0, значит произошла ошибка при расшифровке.

После завершения расшифровки вызовите функцию EVP_DecryptFinal_ex, которая завершит процесс расшифровки и проверит правильность ключа и вектора инициализации.

Пример кода на C++ с использованием OpenSSL для проверки правильности ключа и вектора инициализации при расшифровке сообщения с помощью алгоритма Blowfish в режиме CFB:

#include <openssl/evp.h>
#include <openssl/blowfish.h>
void check_decryption_key(const unsigned char* key, const unsigned char* iv, const unsigned char* ciphertext, int ciphertext_len) {
EVP_CIPHER_CTX *ctx;
// Создаем новую структуру EVP_CIPHER_CTX и инициализируем ее
ctx = EVP_CIPHER_CTX_new();
EVP_CIPHER_CTX_init(ctx);
// Устанавливаем алгоритм шифрования (Blowfish в режиме CFB)
EVP_DecryptInit_ex(ctx, EVP_bf_cfb(), NULL, key, iv);
// Выделяем память под расшифрованные данные
unsigned char *plaintext = new unsigned char[ciphertext_len];
// Расшифровываем данные
int len;
EVP_DecryptUpdate(ctx, plaintext, &len, ciphertext, ciphertext_len);
// Проверяем успешность расшифровки
if (len < 0) {
// Ошибка при расшифровке
delete[] plaintext;
EVP_CIPHER_CTX_free(ctx);
return;
}
// Завершаем процесс расшифровки
EVP_DecryptFinal_ex(ctx, plaintext + len, &len);
// Проверяем успешность завершения процесса расшифровки
if (len < 0) {
// Ошибка при завершении процесса расшифровки
delete[] plaintext;
EVP_CIPHER_CTX_free(ctx);
return;
}
// Выводим расшифрованные данные
printf("Decrypted message: %s\n", plaintext);
// Освобождаем ресурсы
delete[] plaintext;
EVP_CIPHER_CTX_free(ctx);
}

Надеюсь, это поможет вам проверить правильность ключа и вектора инициализации при расшифровке сообщений с помощью алгоритма Blowfish в режиме CFB и библиотеки OpenSSL.

20 Апр в 13:05
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 493 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир