¿Cómo cifrar y descifrar archivos en C?
El siguiente programa utiliza operaciones OR igual para cifrar y descifrar archivos
/****************** Ideas de diseño ** ****************/
//Según la contraseña de cifrado/clasificación ingresada por el usuario,
//Obtener el original archivo cada vez y contraseña y una cadena de la misma longitud que la contraseña.
// Los elementos correspondientes de cifrado/descifrado son diferentes o
// Además, debido a que los métodos o son diferentes, los procedimientos de cifrado y descifrado son los mismos
/ / En otras palabras, el archivo se descifra según el mismo método de cifrado
#include
#include < string.h> p>
#include <.string.h>
#include
#include
#include
char filename[256]; // archivo original
char contraseña[256] // contraseña de cifrado/descifrado
const char; filenametemp[] = " temp15435255435325432543.temp"; // Cifrar/descifrar archivos intermedios
void inputpass(char *pass); // La entrada de contraseña se muestra como "******"
void main () {
ARCHIVO *fp; // Cifrar/descifrar archivo
ARCHIVO *fptemp // Archivo temporal durante el proceso de cifrado/descifrado
int pwdlen./ / Longitud de la contraseña
int i = 0; // Contador
char ch = 0 // Caracteres a leer
printf("Ingrese el nombre del archivo cifrado/descifrado (nombre de ruta completo):\n");
gets(nombre del archivo);
if( (fp = fopen( nombre del archivo, "rb")) == NULL) {
printf("Archivo %s\n", nombre de archivo);
exit(1);
} // if p>
printf("Ingrese la contraseña a cifrar/descifrar: \n");
inputpass(contraseña);
pwdlen = strlen (contraseña);
if(pwdlen == 0) {
printf("La contraseña no puede ser nula, falló el cifrado/descifrado \n");
salir(1 );
}.
// if
printf("La contraseña no puede ser nula, el cifrado/descifrado falló \n");
exit(1);
}/ / if
fptemp = fopen(filenametemp, "wb"); // Abre el archivo intermedio
while(1) {
ch = fgetc(fp ) ;// Leer un carácter del archivo original
if(feof(fp)){ // Se ha leído el final del archivo
break // Salir del bucle;
}
ch ^= contraseña[i++]; // Ejecutar operación XOR en caracteres y contraseña originales
fputc(ch, fptemp); Operación XOR en caracteres originales y contraseña El resultado se escribe en el archivo intermedio
if(i == pwdlen) { // Hace que el archivo original realice una operación XOR de longitud fija en cada carácter de la misma longitud como contraseña
if (fp) { // Haga XOR del archivo original cada carácter de la misma longitud que la contraseña
Permutación de longitud fija de la misma longitud que la contraseña
i = 0;
p>}
}// while
fclose(fp); // Cerrar el archivo original
fclose(fptemp); // Cerrar el archivo del medio
remove( filename); // Eliminar el archivo original
rename(filenametemp, filename); / Cambie el nombre del archivo intermedio al archivo original
printf ("Cifrado/descifrado exitoso\n"); // Cifrado/descifrado exitoso hasta ahora
}
//La contraseña se muestra en formato "*". *****" pantalla
void inputpass(char *pass) {
int i = 0;
char c;
while(isprint(c = getch())){
pasar[i++] = c;
// printf("*");
}
pasar[i] = '\0';
printf("\n");
}