none
Encriptación utilizando encoding ascii RRS feed

  • Pregunta

  • Hola a todos!
    He estado tratando de resolver un problema que tengo al tratar de desencriptar un archivo que yo mismo encripte, pienso que la solución es relativamente sencilla pero ya llevo varios días y no puedo encontrarla por lo que decidí apoyarme en el foro. El problema es el siguiente:
    Tengo un archivo de texto que contiene varias líneas de texto basado en caracteres tipo ASCII "codificado de manera muy simple"; estas líneas de texto son resultado de una rutina que yo mismo cree y que es la siguiente (esta rutina funciona a la perfección, con la salvedad de que debo aún considerar el evento en el cual el usuario cancele el Dialogo)
    private: System::Void botonGuardarSTC_Click(System::Object^ sender, System::EventArgs^ e) {
    
    			 String^ respaldo;
    			 
    			 //se abre un nuevo objeto OpenFileDialog y se le asignan propiedades
    			 SaveFileDialog^ saveFileDialogGuardar = gcnew SaveFileDialog;
    			 saveFileDialogGuardar->InitialDirectory = "c:\\";
    			 saveFileDialogGuardar->Filter = "archivos stc (*.stc)|*.stc";
    			 saveFileDialogGuardar->FilterIndex = 2;
    			 saveFileDialogGuardar->RestoreDirectory = true;
    			 saveFileDialogGuardar->ShowDialog();
    
    			 respaldo = saveFileDialogGuardar->FileName;
    
    			 Encoding^ ascii = Encoding::ASCII;
    			 StreamWriter^ aver = gcnew StreamWriter ( respaldo);
    
    			 array<Byte>^ datosNombreProyecto = ascii->GetBytes( NombreProyecto->Text );
    			 array<Byte>^ datosDescripcionProyecto = ascii->GetBytes( DescripcionProyecto->Text );
    
    			 IEnumerator^ myEnum = datosNombreProyecto->GetEnumerator();
    			 
    			 while ( myEnum->MoveNext() )
    				{
    					Byte b = safe_cast<Byte>(myEnum->Current);
    					aver->Write( b+10 );
    				}
    
    			 aver->WriteLine();
    
    			 IEnumerator^ myEnum2 = datosDescripcionProyecto->GetEnumerator();
    			 while ( myEnum2->MoveNext() )
    				{
    					Byte b2 = safe_cast<Byte>(myEnum2->Current);
    					aver->Write( b2+10 );
    				}
    
    			 aver->WriteLine();
    			 aver->Close();
    		 }
    
    Lo que hago posteriormente a haber generado el archivo STC, es tratar de leerlo con una nueva rutina y es ahí donde tengo el problema debido a que no he podido regresar la matriz de bytes codificada con la rutina anterior, a la matriz de bytes original (las cadenas que introdujo el usuario). Me queda claro el procedimiento, pero al no tener las bases del lenguaje, me ha costado mucho trabajo poder cerrar este problema.
    A continuación coloco el código que he generado hasta este momento, para la lectura del archivo STC y señalo en donde estoy atorado.
     
    private: System::Void botonLeerSTC_Click(System::Object^ sender, System::EventArgs^ e) {
    
    	 
    			 Encoding^ ascii = Encoding::ASCII;
    			 String^ lectura;
    			 
    			 //se abre un nuevo objeto OpenFileDialog y se le asignan propiedades
    			 OpenFileDialog^ openFileDialogArchivoSTC = gcnew OpenFileDialog;
    			 openFileDialogArchivoSTC->InitialDirectory = "c:\\";
    			 openFileDialogArchivoSTC->Filter = "archivos stc (*.stc)|*.stc";
    			 openFileDialogArchivoSTC->FilterIndex = 2;
    			 openFileDialogArchivoSTC->RestoreDirectory = true;
    			 openFileDialogArchivoSTC->ShowDialog();
    
    			 lectura = openFileDialogArchivoSTC->FileName;
    
    			 StreamReader^ archivoSTC = gcnew StreamReader(lectura);
    
    			String^ textLine;
    			array<String^>^ arregloDatos = gcnew array<String^>(10);
    			
    
    			int i = 0;
    			while ( archivoSTC->Peek() >= 0 )
    				{
    				 	textLine = archivoSTC->ReadLine();
    					arregloDatos->SetValue(textLine, i);
    					i++;
    				}
    
    			String^ lineaUno = Convert::ToString(arregloDatos->GetValue(0));
    			array<Byte>^ maestra = ascii->GetBytes(lineaUno);
    
    			IEnumerator^ myEnum = maestra->GetEnumerator();
    									
    				while ( myEnum->MoveNext() )
    							{
    								Byte b = safe_cast<Byte>(myEnum->Current);
    								Byte c = b - 10;
    
    /*aquí es donde estoy atorado, por que no encuentro la forma de generar un arreglo de una sola dimensión que contenga en su única celda, una "cadena" que este formada por las acumulaciones del Byte c, generado en cada iteración*/
    							}
    
    				
    			 NombreProyecto->Text = ascii->GetString(maestra);
     			 DescripcionProyecto->Text = Convert::ToString(arregloDatos->GetValue(1));
    
    			 archivoSTC->Close();
    
    
    			 }
    
     ESPERO QUE ME PUEDA AYUDAR!
    Saludos
    miércoles, 22 de junio de 2011 13:43

Respuestas

  • Lo he resuelto, tal como lo comenté en el post original, la solución fué relativamente sencilla pero al no tener los conceptos hasta lo más sencillo se puede volver extremadamente complicado. Les anexo el código que utilicé para dar solución a mi problema, simplemente cree una matriz llamada "alumna" y con un contador fuí colocando los valores del Byte c en cada celda (mi error de concepto estaba en la forma de entender la estructura de los arreglos unidimensionales). Saludos y espero que esto les sea de ayuda.

    array<Byte>^ alumna = gcnew array<Byte>(30); 
    
    //////////////////////////////////////////////////////		
    
    while ( myEnum->MoveNext() )
    							{
    								
    								Byte b = safe_cast<Byte>(myEnum->Current);
    								Byte c = b - 10;
    								alumna->SetValue(c,jm);
    								jm++;
    							}
    
    ///////////////////////////////////////////////////////
    
    						
    			 NombreProyecto->Text = ascii->GetString(alumna);
    
    
    • Marcado como respuesta fu3nt3s miércoles, 22 de junio de 2011 14:23
    miércoles, 22 de junio de 2011 14:22