usar gpg encriptar desencriptar como archivos c openssl

gpg - Encriptar y descifrar un archivo pequeño usando openssl



encriptar y desencriptar en linux (3)

Idealmente, podrías usar una herramienta existente como ccrypt , pero aquí va:

#include <openssl/aes.h> /* ... */ { int bytes_read, bytes_written; unsigned char indata[AES_BLOCK_SIZE]; unsigned char outdata[AES_BLOCK_SIZE]; /* ckey and ivec are the two 128-bits keys necesary to en- and recrypt your data. Note that ckey can be 192 or 256 bits as well */ unsigned char ckey[] = "thiskeyisverybad"; unsigned char ivec[] = "dontusethisinput"; /* data structure that contains the key itself */ AES_KEY key; /* set the encryption key */ AES_set_encrypt_key(ckey, 128, &key); /* set where on the 128 bit encrypted block to begin encryption*/ int num = 0; 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; } }

El descifrado se realiza llamando a AES_cfb128_encrypt con AES_DECRYPT como el último parámetro. Tenga en cuenta que a este código no se le ha dado nada más que la prueba más elemental, y que realmente debería usar datos aleatorios de 8 bits apropiados para ckey e ivec.

EDITAR : Parece que AES_cfb128_encrypt acepta datos de longitud arbitraria, por lo que no es necesario que cifre en bloques de AES_BLOCK_SIZE (16) bytes.

Quiero escribir un pequeño programa en C / C ++ que lee un pequeño archivo de texto y lo cifra, usando una clave "interna". Luego también quiero escribir otro programa pequeño que pueda descifrar el archivo cifrado usando internamente la misma clave.

Miré el sitio de openSSL y busqué en Google pero no encontré un ejemplo simple, ¿alguien ha intentado alguna vez hacer esto?


Las respuestas anteriores le han indicado cómo hacer lo que pidió.

Me gustaría agregar una palabra sobre por qué probablemente no debería hacer esto .

De lo que habla se llama "cifrado simétrico" (la misma clave se usa para cifrar y descifrar, en lugar de un cifrado asimétrico donde todo lo cifrado con una clave solo puede ser descifrado por una contraparte específica).

Desmontar un ejecutable para determinar una clave codificada que se está utilizando es casi trivial. Eso significa que, cualquiera que tenga sus manos en uno de sus ejecutables, puede romper el cifrado de cualquier mensaje intercambiado.

A menos que la aplicación que tenga en mente sea muy específica, esto significa que su configuración podría "parecer" segura, pero no lo es. En estos casos, generalmente es mejor no cifrar en absoluto, para que nadie involucrado caiga en esa falsa sensación de seguridad ...

Es muy bueno que busque bibliotecas estándar para realizar el cifrado (en lugar de implementar / crear un algoritmo usted mismo), pero el protocolo ( cómo se usan e intercambian las aplicaciones, las claves y los mensajes) es al menos tan importante como el propio cifrado. Es posible que desee que alguien que se dedica a la criptografía ponga a prueba sus ideas para informarle las debilidades. (Estoy seguro de que hay suficiente de ese tipo aquí en .--))


OpenSSL se ocupa específicamente de implementar SSL y TLS, que son protocolos para cifrar datos a través de una red. Ya que solo busca cifrar un archivo, es posible usar OpenSSL pero no es lo ideal.

En su lugar, usaría algo como BeeCrypt o Crypto ++ ® Library 5.6.0 que proporcionan ejemplos para su uso.