OpenSSL AES_cfb128_encrypt C ++

Traté de implementar un ejemplo de cifrado / descifrado "muy" simple. Lo necesito para un proyecto en el que me gustaría cifrar cierta información del usuario. No puedo cifrar toda la base de datos, sino solo algunos campos de una tabla.

La base de datos y la mayoría del resto del proyecto funcionan, excepto el cifrado: Aquí hay una versión simplificada de la misma:

#include <openssl/aes.h>
#include <openssl/evp.h>
#include <iostream>
#include <string.h>

using namespace std;

int main()
{
    /* ckey and ivec are the two 128-bits keys necessary to
       en- and recrypt your data.  Note that ckey can be
       192 or 256 bits as well
     */

    unsigned char ckey[] =  "helloworldkey";
    unsigned char ivec[] = "goodbyworldkey";

    int bytes_read;
    unsigned char indata[AES_BLOCK_SIZE];
    unsigned char outdata[AES_BLOCK_SIZE];
    unsigned char decryptdata[AES_BLOCK_SIZE];

    /* data structure that contains the key itself */
    AES_KEY keyEn;

    /* set the encryption key */
    AES_set_encrypt_key(ckey, 128, &keyEn);

    /* set where on the 128 bit encrypted block to begin encryption*/
    int num = 0;

    strcpy( (char*)indata , "Hello World" );
    bytes_read = sizeof(indata);

    AES_cfb128_encrypt(indata, outdata, bytes_read, &keyEn, ivec, &num, AES_ENCRYPT);
    cout << "original data:\t" << indata << endl;
    cout << "encrypted data:\t" << outdata << endl;

    AES_cfb128_encrypt(outdata, decryptdata, bytes_read, &keyEn, ivec, &num, AES_DECRYPT);
    cout << "input data was:\t" << decryptdata << endl;
    return 0;
}

Pero la salida de datos "descifrados" son algunos caracteres aleatorios, pero son los mismos después de cada ejecución del código.outdata cambia con cada ejecución ...

Intenté depurar y buscar una solución, pero no pude encontrar ninguna solución para mi problema.
Ahora mi pregunta, ¿qué está mal aquí? ¿O no entiendo completamente las funciones proporcionadas?

Respuestas a la pregunta(1)

Su respuesta a la pregunta