Открыть SSL простое шифрование / дешифрование C ++ - PullRequest
0 голосов
/ 10 января 2019

Я использовал следующий код для шифрования и дешифрования файла XML:

int bytes_read, bytes_written;
unsigned char indata[AES_BLOCK_SIZE];
unsigned char outdata[AES_BLOCK_SIZE];
unsigned char ckey[] = "thiskeyisverybad";
unsigned char ivec[] = "dontusethisinput";

AES_KEY key;

AES_set_encrypt_key(ckey, 128, &key);

int num = 0;
FILE * ifp = fopen("Test.XML","rb");
FILE * ofp = fopen("Enc.XML", "wb");
while (1) {
    bytes_read = fread(indata, 1, AES_BLOCK_SIZE, ifp);

    AES_cfb128_encrypt(indata, outdata, bytes_read, &key, ivec,&num,AES_ENCRYPT);

    bytes_written = fwrite(outdata, 1, bytes_read, ofp);
    if (bytes_read < AES_BLOCK_SIZE)
        break;
}

num = 0;
FILE * ifpe = fopen("Enc.XML", "wb");
FILE * ofpe = fopen("TestDec.XML", "rb");

while (1) {
    bytes_read = fread(indata, 1, AES_BLOCK_SIZE, ifpe);
    AES_cfb128_encrypt(indata, outdata, bytes_read, &key, ivec, &num, AES_DECRYPT);

    bytes_written = fwrite(outdata, 1, bytes_read, ofpe);
    if (bytes_read < AES_BLOCK_SIZE)
        break;
}

Я ссылался на ссылку Шифрование и дешифрование небольшого файла с использованием openssl . Я получаю зашифрованный файл в Enc.XML. Когда я пытаюсь расшифровать код, файл создается из пустых записей. Хотел узнать, чего не хватает в расшифрованном коде.

1 Ответ

0 голосов
/ 11 января 2019

Буфер "ivec" модифицируется при каждом вызове AES_cfb128_encrypt. Если ваш код не две программы, а одна проблема, как у вас выше, то вам нужно сбросить буфер "ivec" обратно к исходному значению, прежде чем пытаться расшифровать.

Что-то вроде:

char ivec[16];
…
memcpy(ivec, "dontusethisinput", 16);
… encrypt code
memcpy(ivec, "dontusethisinput", 16);
… decrypt code
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...