Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Kaxperday

#361
Jejeje, curioso eso fue lo primero que hice y se me ocurrió pero parecio no dar resultado ahora pongo las pruebas.

Saludos.

Código:

Código (cpp) [Seleccionar]
string encriptar_primera(string entrada)
{
try
{
encriptador_1 oRijndael;
char *salida = new char[entrada.length()]();
oRijndael.MakeKey(ENCLAVE_PRIMERA, encriptador_1::sm_chain0, 24, 24);
while (entrada.length() % 24 != 0)
entrada+='\0';
oRijndael.Encrypt(entrada.c_str(), salida, entrada.length(), encriptador_1::CBC);//falla encript
cout << ": " << salida << endl;
return string(salida);
}
catch (exception& roException)
{
return "";
}
}

string desencriptar_primera(string entrada)
{
try
{
encriptador_1 oRijndael;
char *salida = new char[entrada.length()]();
oRijndael.MakeKey(ENCLAVE_PRIMERA, encriptador_1::sm_chain0, 24, 24);
while (entrada.length() % 24 != 0)
entrada += '\0';
oRijndael.Decrypt(entrada.c_str(), salida, entrada.length(), encriptador_1::CBC);
cout << ": " << salida << endl;
return string(salida);
}
catch (exception& roException)
{
return "";
}
}



Ahora ejecuto.. ahi están las principales funciones se muestra la cadena original, se muestra luego la cadena cifrada, y luego la descifrada de la que solo se descifran los 48 primeros caracteres.

Salida:

CitarPresione una tecla para continuar . . .
CPcqGW51VRuFPRzAxwEM7mgF5BDu2xspuP4DtANxnyFtCn4jPKItqWCAdJn6QTMTgH0wSWCMQOKA3H6OxDNJOWH2PIWCy3k79QJw : ╣ܸ¾▀fºYb┼‗     $Û4░sÍSÑ█ñmÿ`╚XK¥8­Q+òHZ;çfª?>¥YR┼öÏ\RR·7eü8MȨ╝¬i─ÛèuÙÏ  ã¼ã«Xc╣
1Presione una tecla para continuar . . .
: CPcqGW51VRuFPRzAxwEM7mgF5BDu2xspuP4DtANxnyFtCn4jPKItqWCAdJn6QTMTgH0wSWCM>▄n£¶°cN$│║©QF©
1Presione una tecla para continuar . . .

Saludos.

Edito: Otra prueba de que no rula:

Código (cpp) [Seleccionar]
encriptador_1 e3;
string entrada = "0q9an9yv7134nyc8q09wrucy09q349y9q34y7n3wwwwwwwwwwwwwwww9999";
e3.MakeKey(ENCLAVE_PRIMERA, encriptador_1::sm_chain0, 24, 24);
while (entrada.length() % 24 != 0)
entrada += '\0';
char *salida = new char[entrada.length()]();
char *salidas = new char[entrada.length()]();
cout << "entrada: " << entrada.c_str() << endl;
e3.EncryptBlock(entrada.c_str(),salida);
cout << "cifrada: " << salida << endl;
e3.DecryptBlock(salida, salidas);
cout << "salida: " << salidas << endl;


Muestra:

Citarentrada: 0q9an9yv7134nyc8q09wrucy09q349y9q34y7n3wwwwwwwwwwwwwwww9999
cifrada: Sî$+│kz
salida: 0q9an9yv7134nyc8q09wrucy
Presione una tecla para continuar . . .

Falta el resto.
#362
Hola, hace unos dias estuve buscando algo para cifrar cadenas de texto incluso un archivo completo, y encontré este encriptador de código abierto que incluí en mi proyecto.

Funciona, pero cifra bloques de 8, 16, y 24 carácteres, luego si lo que quieres cifrar no es múltiplo de eso falla.

¿que solución puedo aportar?.

Código (cpp) [Seleccionar]
string encriptar_primera(string entrada)
{
try
{
encriptador_1 oRijndael;
string retorno;
oRijndael.MakeKey(ENCLAVE_PRIMERA, encriptador_1::sm_chain0, 24, 24);
while (entrada.length() % 24 != 0)
entrada += 'Z';
for (int i = 0; i < entrada.length(); i = i + 24){
char *salida = new char[entrada.length()]();
salida = NULL;
string bloque = entrada.substr(i, 24);
oRijndael.EncryptBlock(bloque.c_str(), salida);
retorno += salida;
}
cout << ": " << retorno << endl;
return retorno;
}
catch (exception& roException)
{
return "";
}
}


Probé a añadirle 'Z' hasta que sea múltiplo pero creo que la llamada Encrypt hace Xor y por eso no funciona, ¿qué puedo hacer para trabajar con ello sin problemas si quiero cifrar cadenas no necesariamente multiplos de 24 sin perder datos.

Saludos.
#363
.NET (C#, VB.NET, ASP) / Re: Captcha To Text API
22 Agosto 2015, 00:36 AM
Hehe, +1 estaría bien tener una API capaz de eso.

Saludos.
#364
Programación C/C++ / Re: Problema abrir archivo
18 Agosto 2015, 17:21 PM
Hola socio, gracias por la respuesta. Eso pensé también, pero de todas formas lo que haces es sobreescribir pero desde el punto que quieras hacia atrás, pensaba que habría alguna opción para insertar y que automaticamente te lo desplace todo, en vez de sobreescritura.

Porque si quiero escribir en la posicion 10 "holaquetal" y el archivo tiene 1500 caracteres, voy a tener que reescribir 1500 + strlen("holaquetal") en vez de insertar. Debería de haber algo para C++, de todas formas tampoco sería difícil implementar una función que lo haga.

Pero para eso, casi que lo leo todo en una cadena, la modifico y lo escribo todo, o como dices tu que sería un poco mas de código.

Saludos y gracias.

Edito: E aquí la implementación:

Código (cpp) [Seleccionar]
datos = datos + contenido.substr(inicio);
archivo.clear();
archivo.seekp(inicio);
archivo.write(datos.c_str(), datos.length());
archivo.close();


#365
Programación C/C++ / Re: Problema abrir archivo
17 Agosto 2015, 16:43 PM
Hola, tenía otro problema, y es que quería insertar en el archivo una cadena en mitad de su contenido, para ello probé a usar esto:

Código (cpp) [Seleccionar]

               fstream archivo;
       archivo.open(directorio, fstream::in |  fstream::app);//fstream::out |
               archivo.clear();
archivo.seekp(inicio);
archivo.write(datos.c_str(), datos.length());//sobreescribe.
archivo.close();


Muevo el puntero, a "inicio" donde quiero insertar una cadena de carácteres, para ello uso write, pero el problema es que el write me sobreescribe lo que tengo, y corrompe el archivo, lo que quiero es poderlo añadir, sin que haya sobreescritura, he probado a abrirlo solo en modo app (con el puntero atrás), pero luego al usar el seekp() no debe de funcionar ya que me escribe la cadena al final del archivo aunque haya movido el puntero supuestamente, si no hay manera de corregirlo, apuesto apostaré por leer todo el contenido en una string insertar en la string y copiarlo todo al archivo sorbrescribiendolo, pero sería la peor solución.

Saludos y gracias.
#366
Programación C/C++ / Re: Problema abrir archivo
15 Agosto 2015, 20:11 PM
Así es, ya lo solucioné gracias por la respuesta, de todas formas al leer el contenido del archivo, aqui:

Código (cpp) [Seleccionar]
string contenido;
while (archivo.good()){
contenido += archivo.get();
}


Me preguntaba si se puede hacer de forma más rápida usando archivo.read(contenido, HASTA EL FINAL);

Simplemente por si es más rápido, en vez de caracter a caracter.

Saludos.
#367
Programación C/C++ / Problema abrir archivo
15 Agosto 2015, 19:16 PM
Hola, no entiendo porque si abro el archivo en modo escritura y lectura a la vez, no puedo hacer ambas cosas a la vez, sino que tengo que cerrarlo y volverlo a abrir.

Código (cpp) [Seleccionar]
fstream archivo;
archivo.open(directorio, fstream::in | fstream::out);
if (!archivo)
return false;
else{
string contenido;
while (archivo.good()){
contenido += archivo.get();
}

//archivo.close();
//archivo.open(directorio, fstream::out || fstream::ate);
//contenido = contenido.insert(inicio, datos);
//archivo.write(contenido.c_str(), contenido.length());
archivo.seekp(inicio);
archivo.write(datos.c_str(), datos.length());
archivo.close();


Este code no funciona, lo que quiero hacer es leer todo el archivo e insertar datos en el archivo, pero no hay manera, parece que despues de leerlo tengo que cerrarlo y abrirlo en escritura para escribir en el, ¿esto es siempre asi? ¿o hago algo mal?

Saludos.
#368
Hola, no siempre es necesario declarar un constructor, puedo ponerlo o no, no creo que sea el fallo, de todas formas toca la moral, porque sigue fallando. Además se alternan el "error interno de compilador" con "Error   3   error LNK1136: archivo no válido o dañado", no sé todo lo que sea declarar una clase de tipo almacén hace saltar uno de esos errores, quizás tenga que reestructurarla entera, o crear nuevo proyecto..  :( :(

Saludos.

Edito: Odio cuando estás programando y te salen errores de estos de ** y te ** el día.

Edito: JAJAJA he podido flipar, lo he declarado como puntero a clase y compila, según leí entre otras cosas era que podía superar la memoria asignada para la aplicación y por eso saltaba el error, no sé si ponerlo como puntero tendrá que ver pero ha compilado (aunque no quiero poner un puntero XD).

Edito: hehe no funciona el puntero.

Edicion final de delicatese: Ya lo solucioné, el problema estaba al declarar la string con los 4 delimitadores, creé otra clase y fui añadiendo cosas hasta que ví donde saltaba el error, ahora tengo un vector<string> delimitadores, y hago pushback en el constructor.

Saludos.
#369
Código (cpp) [Seleccionar]
almacen a;
a.crear_archivo();
a.insertar_campo("pruebaOEIOIEOCIo", 2);
cout << a.obtener_campo(2);


CitarError   3   error C1001: Error interno en el compilador.

Definicion de la problemática clase:

Código (cpp) [Seleccionar]
class almacen
{
private:
string directorio = string(DIRECTORIO_INSTALACION) + string(NOMBRE_ALMACEN);
string *delimitadores = new string[5]{
"Cqwerwerwerwer23t23tt",
"7348b3835grtjebr6uertt",
"nyFtCn4jPKItqWCAdJn66",
"QT36ub356iub356ub635"
"y98NYN8YA89CYA898333"};
public:
bool crear_archivo();
bool existe_archivo();
bool corrupto_archivo();
bool insertar_campo(string datos, int campo);
string obtener_campo(int campo);
bool eliminar_campo(int campo);
bool encriptar_archivo();
bool desencriptar_archivo();
};


Saludos.
#370
Okay gracias, está bastante aclarado. Supongo que solo comprueba si existe no hace nada de abrirlo o así, así que despues de la llamada a esa función en el caso de que sí exista no se encontrará abierto no?, de todas formas si llamo a close() tampoco habrá problemas, pero no creo que sea necesario.

Saludos  ;D