elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Problema al obtener string de archivo cifrado
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema al obtener string de archivo cifrado  (Leído 1,344 veces)
Kaxperday


Desconectado Desconectado

Mensajes: 702


The man in the Middle


Ver Perfil WWW
Problema al obtener string de archivo cifrado
« en: 2 Septiembre 2015, 03:03 am »

Bueno, para acabar la noche escribo este post.

Miren tengo un archivo que divido en campos con delimitadires, escribo cadenas encriptadas en cada campo. El problema es que luego al obtener esas cadenas no las recojo correctamente, creo que es porque uso string en vez de char o no sé.

Lo leo todo su contenido así:

Código
  1. string almacen::obtener_campo(int campo)
  2. {
  3. ifstream archivo;
  4. archivo.open(directorio, ifstream::in);
  5. if (!archivo)
  6. return "";
  7. else{
  8. string contenido;
  9. while (archivo.good())
  10. contenido += archivo.get();
  11. archivo.clear();
  12. archivo.close();
  13. }
  14.  

Me dice que tiene lo siguiente:

Citar
CPcqGW51VRuFPRzAxwEMholaaaaaaaaque haaceess maripooossssssssssa7mgF5BDu2xspuP4DtANxO■¦©^×{oT╗┐Gç_÷SÆs
È~©BüQ³f5Ä{░µ ðø¥¹Q:╗\‗Y╚§.áë╔¾¶ÈÙ│Ï,jI¸Ñ°┴!▀Òs

Pero el archivo con el bloc de notas muestra lo siguiente:

Citar
CPcqGW51VRuFPRzAxwEMholaaaaaaaaque haaceess maripooossssssssssa7mgF5BDu2xspuP4DtANxOþݸ^ž{oT»¿G‡_öS’s
¢&H‹>VßnÎÀeØo®QNЛ¾ûQ:»\òYÈõ. ‰ÉóôÔë³Ø,jI÷¥øÁ!ßãs
Ô¶~¸BQüf5Ž{°æÔ;pÉE^ª•€UÏ·Ù¹ÒیM™ÈuUÌvýýýý^ÿ^ÿnyFtCn4jPKItqWCAdJn6QTMTgH0wSWCMQOKA3H6OxDNJOWH2PIWCy3k79QJwÿ

¿Porque no accedo a todos los datos? ¿acaso no puedo obtener todos los caracteres con ifstream.get()? ¿qué solución puedo dar?

Saludos y gracias.

Edito: Sin embargo caracteres alfanumericos los lee sin problemas, pero los raros no.. ¿ que son ? xd

Edito: Acabo de abrirlo en binario || fstream::binary  y el resultado ha sido el mismo.


« Última modificación: 2 Septiembre 2015, 03:10 am por Kaxperday » En línea

Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.
ivancea96


Desconectado Desconectado

Mensajes: 3.414


ASMático


Ver Perfil WWW
Re: Problema al obtener string de archivo cifrado
« Respuesta #1 en: 2 Septiembre 2015, 10:18 am »

No trates de mostrar por pantalla datos binarios. En su lugar, muestra la longitud de la cadena , un checksum, o muestra los caracteres en hexadecimal.
En cualquier caso, no hay nunca necesidad de ver la cadena binaria. Simplemete descifrala o conviertela al tipo de dato que representa.


En línea

RockPosts

Desconectado Desconectado

Mensajes: 28


Ver Perfil
Re: Problema al obtener string de archivo cifrado
« Respuesta #2 en: 2 Septiembre 2015, 12:42 pm »

Respuesta corta: hay un carácter nulo en tu cadena. Descargar un programa para ver archivos en hexadecimal para ver donde está el caracter nulo.

Respuesta larga: Cuando muestras una cadena de texto, o string, lo que haces es imprimir caracter a caracter la cadena. ¿Cómo sabes cuando la cadena ha llegado a su fin? La consola no sabe la longitud de la cadena. Por ello, hay que usar un sistema para delimitar la cadena. Lo que se ha estandarizado es usar un caracter no gráfico (no se muestra por pantalla), y cuando se llega a ese caracter, significa que la cadena ha terminado. Ese caracter tiene un valor nulo, es decir, 0. En conclusión, hay un caracter nulo en tu cadena. Puedes comprobar eso con programas que abren el archivo y te muestran su contenido en hexadecimal. Comprueba donde está ese caracter nulo.

PD.: Recomiendo el HxD para ver archivos en hexadecimal
En línea

Kaxperday


Desconectado Desconectado

Mensajes: 702


The man in the Middle


Ver Perfil WWW
Re: Problema al obtener string de archivo cifrado
« Respuesta #3 en: 5 Septiembre 2015, 21:39 pm »

Hola a todos, el problema estaba en que tenía que leerlo en binario para no perder datos, puesto que como lo hacía leía menos bytes.

Código que permitió leer todos los bytes del archivo:

Código
  1. ifstream archivo;
  2. archivo.open(directorio, ifstream::binary);// ifstream::in || ifstream::binary);
  3. if (!archivo)
  4. return true;
  5. else{
  6. string contenido;
  7. archivo.seekg(0, ifstream::end);
  8. streampos size = archivo.tellg();
  9. char *memblock = new char[size]();
  10. archivo.seekg(0, ifstream::beg);
  11. archivo.read(memblock, size);
  12. archivo.close();
  13. contenido = string(memblock);

De todas formas gracias por las respuestas, aunque las leo ahora, lo solucioné poco después de escribir el tema, y quedé sin conexión a internet, y he estado desconectado hasta hoy, ya os digo que está solucionado, pero gracias.

Saludos.
En línea

Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Coger el texto de un string para obtener el nombre de una variable
Programación Visual Basic
merlin 9 3,309 Último mensaje 20 Abril 2007, 11:11 am
por merlin
Ayuda Archivo cifrado
Criptografía
jagb80 3 3,074 Último mensaje 6 Junio 2010, 02:30 am
por jagb80
Buscar string en un archivo, y obtener datos
Programación C/C++
emma1990 3 4,660 Último mensaje 21 Marzo 2011, 23:34 pm
por Akai
Recorrer una string para obtener iniciales
Java
andressalasmx 3 5,917 Último mensaje 9 Noviembre 2014, 10:12 am
por ivancea96
[DUDA] String cifrado
Criptografía
REEND 4 3,132 Último mensaje 16 Mayo 2016, 17:09 pm
por REEND
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines