c ++ problemas de registro y resolver de cifrado de archivos

(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 }

 

 

 

    

    

Supongo que te gusta

Origin www.cnblogs.com/cs-weilai/p/12507632.html
Recomendado
Clasificación