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

21 Авг 2019 в 07:12
209 +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_keyconstunsignedchar∗key,constunsignedchar∗iv,constunsignedchar∗ciphertext,intciphertextlenconst unsigned char* key, const unsigned char* iv, const unsigned char* ciphertext, int ciphertext_lenconstunsignedcharkey,constunsignedchariv,constunsignedcharciphertext,intciphertextl en {
EVP_CIPHER_CTX *ctx;
// Создаем новую структуру EVP_CIPHER_CTX и инициализируем ее
ctx = EVP_CIPHER_CTX_new;
EVP_CIPHER_CTX_initctxctxctx;
// Устанавливаем алгоритм шифрования BlowfishврежимеCFBBlowfish в режиме CFBBlowfishврежимеCFB EVP_DecryptInit_exctx,EVPbfcfb(),NULL,key,ivctx, EVP_bf_cfb(), NULL, key, ivctx,EVPb fc fb(),NULL,key,iv;
// Выделяем память под расшифрованные данные
unsigned char *plaintext = new unsigned charciphertextlenciphertext_lenciphertextl en;
// Расшифровываем данные
int len;
EVP_DecryptUpdate(ctx, plaintext, &len, ciphertext, ciphertext_len);
// Проверяем успешность расшифровки
if (len < 0) {
// Ошибка при расшифровке
delete plaintext;
EVP_CIPHER_CTX_freectxctxctx;
return;
}
// Завершаем процесс расшифровки
EVP_DecryptFinal_ex(ctx, plaintext + len, &len);
// Проверяем успешность завершения процесса расшифровки
if (len < 0) {
// Ошибка при завершении процесса расшифровки
delete plaintext;
EVP_CIPHER_CTX_freectxctxctx;
return;
}
// Выводим расшифрованные данные
printf"Decryptedmessage:"Decrypted message: %s\n", plaintext"Decryptedmessage:;
// Освобождаем ресурсы
delete plaintext;
EVP_CIPHER_CTX_freectxctxctx;
}

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

20 Апр 2024 в 13:05
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир