(Primera blog, espero que todos puedan apoyar! Principiante, o si el problema mejor visión, indique en el área de comentarios, por favor, Share!)
I. Descripción del problema
Escribir un programa de cifrado que lee de cin (un archivo) y escribe los caracteres codificados a cout (un archivo).
Es posible utilizar este esquema de cifrado simple: la forma encriptada de un carácter c es c ^ tecla [i] , donde clave es una cadena que se pasa como argumento de línea de comandos. El programa utiliza los caracteres en la clave de una manera cíclica hasta que toda la entrada ha sido leído. Re-encriptación de texto codificado con la misma clave produce el texto original. Si no se pasa tecla (o una cadena nula), entonces no se realiza encrption.
En segundo lugar, el problema se resuelve
1.thinking
Crea tres archivos: in.txt (para leer), out.txt (la memoria del resultado cifrado), original.txt (resultado descifrado se almacena).
Leer el archivo, para las operaciones criptográficas subsiguientes; si falla la lectura, manejo de excepciones.
2.important
①. Aprender C ++ operación de bit (aquí principalmente para ^ operación O exclusiva)
②. Algunos de procesamiento de archivos
3.process
①. Acerca de operación XOR
Como puede verse, el valor de retorno es la operación XOR int, char ^ int y en realidad lleva a cabo en la conversión de tipo implícito Char.
Además, tenemos que leer un char de archivo in.txt a un int leer de out.txt en.
Tiene una operación OR exclusiva para algunas aplicaciones específicas: 1 o un número diferente dos veces per se. 2. una serie de O exclusivo conserva el valor original 0 (10011001 ^ 00000000 -> 10011001)
②. Acerca de archivos lee y EOF
Explicación detallada de la EOF: https://www.cnblogs.com/dolphin0520/archive/2011/10/13/2210459.html
El archivo se carga, cada uno debe juzgar si la lectura después de leer EOF. Por supuesto, está escrito de acuerdo a las circunstancias específicas. En esta pregunta, el cuerpo si los ciclos de lectura y escritura para determinar las condiciones de tiempo (! F_in.eof ()) será ocurren problemas imprevisibles, incluso si el archivo ha sido leído, pero el ciclo no termina!
4.result
Compartir Fuente
1 #include <iostream> 2 #include <fstream> 3 #include <cstring> 4 5 usando espacio de nombres std; 6 7 int principal ( int argc, char ** argv) 8 { 9 ifstream aleta ( " in.txt " ); 10 si (! {Fin.is_open ()) 11 cout << " No se puede abrir el archivo \" in.txt \" " ; 12 de retorno - 1 ; 13 } 14 15 del FOUT fstream ( " out.txt " ); 16 SI (! {Fout.is_open ()) 17. Tribunal << " del archivo no se puede abrir \" out.txt \ " " ; 18 es el retorno - 1. ; . 19 } 20 es 21 es IF (strlen (el argv [ . 1 ]) == 0 ) {// si no recibe los parámetros de línea de comandos, el cifrado y el descifrado no se realiza 22 es de cadena TEMP; 23 es COUT << " .. no no cifrado de clave " << endl; 24 al mismo tiempo (FIN >>temperatura){ 25 fout << temporales; 26 } 27 de retorno 0 ; 28 } 29 30 Char temp; 31 int i = 0 ; 32 33 mientras que (aleta. Obtener (temp)) //加密运算 34 { 35 fout << (temp ^ argv [ 1 ] [strlen (argv [ 1 ]) - i% strlen (argv [ 1 ])]) << ' ' ; 36 i ++ ; 37 } 38 39 fin.close (); 40 fout.close (); 41 42 tribunal << " Cifrado ha hecho. " << endl 43 << " Ahora comienzan volver a cifrar. " << endl; 44 45 ifstream f_in ( " out.txt " ); 46 si (! {F_in.is_open ()) 47 cout << " No se puede abrir el archivo \" out.txt \" " ; 48 de retorno - 1 ; F_OUT ofstream ( " original.txt " ); 52 es SI (! {F_out.is_open ()) 53 es tribunal << " del archivo no se puede abrir \" original.txt \ " " ; 54 es el retorno - 1. ; 55 } 56 es 57 es lo = 0 ; 58 int TEMP_1; 59 al mismo tiempo (f_in >> TEMP_1) {// operación de descifrado, se requiere un molde aquí de caracteres de salida 60 F_OUT << Char ((^ TEMP_1 la argv [ 1. [strlen (el argv [] 1. ] ) - I% strlen (el argv [ . 1])])); 61 i ++ ; 62 } 63 64 cout << " Re-cifrado ha hecho. " << endl; 65 de retorno 0 ; 66 }