2010-08-01 51 views
5

Quiero tener un programa como este:¿Cómo encriptar un archivo de texto usando C?

scanf("%s", name); 
scanf("%s", id); 
scanf("%d", &age); 

Ahora quiero escribir name, id y age a un archivo, pero el archivo debe ser encriptada, por lo que sólo mi programa puede leer de nuevo los datos que escribió

¿Necesito usar una de las bibliotecas de cifrado mentioned here (todas son bibliotecas bastante pesadas, solo necesito encriptar un archivo de texto), o hay algún otro método más simple?

Si la solución es una biblioteca de cifrado, ¿cuál es la más adecuada para un simple cifrado de archivos de texto?

+3

Si se empieza con el cifrado de archivos recomiendo que piensen también acerca de dónde debe mantener la contraseña/clave utilizada para el cifrado de archivos. – Oleg

Respuesta

3

Mejor utilizar un algoritmo de clave simétrica, como AES. Puede encontrar pequeños códigos fuente here, por ejemplo.

Si sus aplicaciones son críticas, entonces debe usar las bibliotecas a las que se ha vinculado.

7

Si desea seguridad, es un error ejecutar su propia biblioteca de cifrado. Use una biblioteca de cifrado bien establecida (incluso si puede parecer inflada) y deje la seguridad y su implementación adecuada a los expertos.

Si puede usar C++, sugiero Crypto++, y si no puede usar C++, entonces le sugiero que implemente una biblioteca de contenedor C alrededor de Crypto++. Otra posibilidad es libcrypto, aunque carece de soporte para AES.

Debo advertirle, sin embargo, que si el programa y el archivo de texto están en la misma máquina, deberá tener la contraseña proporcionada externamente (por ejemplo, por el usuario); las contraseñas que están integradas en los programas se extraen fácilmente y no ofrecen seguridad en absoluto. Si el programa es inaccesible (por ejemplo, está ubicado en un servidor web y alguien con el archivo de texto no tendrá acceso al ejecutable), entonces está bien.

+0

por supuesto, libcrypto admite AES. –

+0

@GregS, no de acuerdo con la página man. –

0

Para un archivo de texto simple que lea/escriba de una vez, usaría un cifrado de flujo, p. RC4.

Suponiendo que está utilizando una clave secreta incrustada RC4 es lo suficientemente fácil de implementar usted mismo, o debe haber un montón de implementaciones ligeras por ahí.

+0

¿Pero cómo consumirías el IV? Eso es bastante difícil con RC4. – CodesInChaos

+0

Normalmente combina el IV con la contraseña u otro secreto compartido en la entrada para el paso de generación de claves, p. añadirlo o anteponerlo a la contraseña. – Rup

2

¿Necesita una encriptación fuerte? ¿Tienen acceso las personas con las que protege el archivo al ejecutable y tienen las habilidades para desensamblarlas y analizarlas? ¿Tiene habilidades cryptanalytic? De lo contrario, puede usar un cifrado muy simple basado en XOR.

  1. Utilice un programa para generar una cadena larga de caracteres al azar, por ejemplo "837es238aj983", pero más largo que cualquier cadena puede leer de la entrada (que no tiene por qué ser legible).
  2. Genera un entero aleatorio.
  3. Almacene la cadena aleatoria y el entero como variables globales en su programa C.
  4. XOR cada edad que lea con su entero aleatorio y guarde el valor XORed en el archivo.
  5. XOR cada carácter de las cadenas que lee desde la entrada con el carácter en el mismo índice en su cadena aleatoria. Guarde el valor de XORed en el archivo.
  6. Cuando lee los valores del archivo, vuelve a XOR con sus claves aleatorias y obtiene los valores originales.
+4

-1. No implemente su propia cripto, nunca. Si necesita que sea seguro, use criptografía real. Si no necesita que sea seguro, no cifre en primer lugar. – SecurityMatt

Cuestiones relacionadas