Нарушение прав доступа при использовании OpenSSL Camellia
Я пытаюсь написать программу расшифровки камелии в Windows, используя С++ в качестве языка и OpenSSL в качестве криптографического провайдера. При попытке выполнить код я получаю следующую ошибку
Exception thrown at 0x00007FFABB31AEF8 (libcrypto-3-x64.dll) in Lab8.exe: 0xC0000005: Access violation reading location 0x0000000000000028.
Код:
#include <iostream>
#include <windows.h>
#include <openssl/camellia.h>
#include <openssl/conf.h>
#include <openssl/err.h>
#include <string.h>
#pragma warning(disable : 4996)
unsigned char iv[] = "\xd4\xc5\x91\xad\xe5\x7e\x56\x69\xcc\xcd\xb7\x11\xcf\x02\xec\xbc";
unsigned char camcipher[] = "\x00\xf7\x41\x73\x04\x5b\x99\xea\xe5\x6d\x41\x8e\xc4\x4d\x21\x5c";
const unsigned char camkey[] = "\x92\x63\x88\x77\x9b\x02\xad\x91\x3f\xd9\xd2\x45\xb1\x92\x21\x5f\x9d\x48\x35\xd5\x6e\xf0\xe7\x3a\x39\x26\xf7\x92\xf7\x89\x5d\x75";
unsigned char plaintext;
CAMELLIA_KEY finalkey;
int main()
{
Camellia_set_key(camkey, 256, &finalkey);
Camellia_cbc_encrypt(camcipher, (unsigned char*)plaintext, CAMELLIA_BLOCK_SIZE,&finalkey, iv, 0);
std::cout << plaintext;
}
Ключ и IV были сгенерированы с использованием urandom из python3, а затем использованы для создания зашифрованного текста с использованием библиотеки камелии PyCryto.
Я намеренно оставил зашифрованный текст размером 16 байт, чтобы избежать заполнения. Я действительно не уверен, что я делаю неправильно вообще. Любая помощь будет потрясающей.
Открытый текст должен читаться как «секретное сообщение».
1 ответ
Похоже, вам нужно объявить
unsigned char plaintext;
быть
unsigned char plaintext[17];
, в противном случае вы перезаписываете неинициализированную память.