![]() |
Función de Delphi a C++
Buenas,
Resulta que tengo una aplicación en Delphi que me genera un fichero con una serie de cadenas con una simple encriptación XOR mediante esta función:
El fichero encriptado lo voy a leer desde C++ y estoy intentando traducir esta función a C++ pero sin demasiada suerte Código:
AnsiString __fastcall DecryptString(AnsiString ToDecript, unsigned int Key)Alguien puede hacerme la luz diciéndome dónde tengo el error? Gracias |
Cita:
Cada vez que llamas a random(256) genera un numero aleatorio del 0 al 255, entonces al desencriptar como sabes con que numero desencriptar? |
Hola
Cita:
Probado en Delphi la encriptación de una frase y la posterior desencriptación y funciona a las mil maravillas. El problema lo sigo teniendo al pasarlo a C++, que no hay manera de que me funcione :( Alguna sugerencia? Gracias |
Cita:
Saludos. |
1 Archivos Adjunto(s)
Cita:
Pero alguien puede ayudarme a pasar esa función a C++?? :D :D |
Código:
Código:
Result = Result + (((unsigned_int8)ToDecript[i]) ^ random(256));suponiendo que los tipos sean correctos (unsigned_int8, AnsiString).Quizas deberias probarlo con unsigned char * directamente, y i = 0; i<Length... |
nada, perdon me hice un lio con los parentesis, parecen correctos...eso si, no deberias sumar al ansistring como char, una vez vuelto hecho el ^ ?
|
siempre y cuando randseed funcione de la misma manera en C...creo recordar que randomize en C acepta un parametro como semilla.
|
Hola
Cita:
Referente al randsee, pues no sabría decirte si funciona igual en ambos lenguajes :confused: Miraré por ahí a ver Gracias |
Respondo rápido y sin probar. randomize en C no tiene semilla.
random debería ser sustituida por Random que no es ansi C pero si viene en el Builder. C es sensible al "Case". Espero estar en lo cierto. Saludos. |
no, random va en minusculas, como printf o getc o atoi, atof...casi todas las funciones de estandar c estan en minusculas.
Cita:
|
me da que el error es por los tipos...yo de ti probaria hacerlo todo en tipos nativos puros (char * para string, unsigned int o unsigned long int, etc...) y usar strlen etc tambien, ya q el xor es a nivel de bits y quizas cambie su tratamiento segun el tipo.
|
Estoy de acuerdo con coso.
En mi Builder 5 no puedo probar, Random no está implamentada y la función random del C no es adecuada. En delphi 6 si está implementada y supongo que en Builder 6. Yo probaría con esto: Código:
Result = Result +(char) (((BYTE)ToDecript[i]) ^ Random(256)); |
Me pregunto el porqué de la necesidad de la traducción, es decir Random(256) debe generar siempre el mismo número del 0 al 256 (un Byte) para que el algoritmo funcione, y ese valor depende de Key (RandSeed = Key) luego es posible realizar la función prescindiendo de Random si conocemos como convertir el valor.
Por otro lado es un sistema excesivamente simple pues el xor se hace con 8 bits.... Solamente si estás obligado a seguir ese tipo de codificación pues no te queda otro remedio. Una opcion que site va a funcionar es realizar una unit con esa funcion en delphi y compliarla talcual con el Builder, puesto que compila pascal... Saludos. |
Recuerda que las cadenas en C, comienzan con 0 y terminan con Length()-1
Saludos |
Hola
Cita:
Cita:
Cita:
Cita:
Gracias por todos los aportes |
Esta función te puede servir:
Código:
void Crypt(void *Source, int Size, char* Clave, int Mod=0);Código:
#include "windows.h" |
| La franja horaria es GMT +2. Ahora son las 03:25:11. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi