FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
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) { AnsiString Result = ""; RandSeed = Key; for (int i=1; i<=ToDecript.Length(); i++) { Result = Result + (((unsigned _int8)ToDecript[i]) ^ random(256)); } return Result; } Alguien puede hacerme la luz diciéndome dónde tengo el error? Gracias |
#2
|
||||
|
||||
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? |
#3
|
|||
|
|||
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 |
#4
|
||||
|
||||
Cita:
Saludos. |
#5
|
|||
|
|||
Cita:
Pero alguien puede ayudarme a pasar esa función a C++?? |
#6
|
|||
|
|||
Código:
Result = Result + (((unsigned _int8)ToDecript[i]) ^ random(256); 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... |
#7
|
|||
|
|||
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 ^ ?
|
#8
|
|||
|
|||
siempre y cuando randseed funcione de la misma manera en C...creo recordar que randomize en C acepta un parametro como semilla.
|
#9
|
|||
|
|||
Hola
También lo he probado y nada, sigue dándome un valor erróneo (o que yo no espero). Referente al randsee, pues no sabría decirte si funciona igual en ambos lenguajes Miraré por ahí a ver Gracias |
#10
|
||||
|
||||
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. |
#11
|
|||
|
|||
no, random va en minusculas, como printf o getc o atoi, atof...casi todas las funciones de estandar c estan en minusculas.
Cita:
Última edición por coso fecha: 11-09-2008 a las 19:48:11. |
#12
|
|||
|
|||
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.
|
#13
|
||||
|
||||
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)); |
#14
|
||||
|
||||
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. |
#15
|
||||
|
||||
Recuerda que las cadenas en C, comienzan con 0 y terminan con Length()-1
Saludos
__________________
Ya tengo Firma! |
#16
|
||||
|
||||
Hola
Cita:
Cita:
Cita:
Cita:
Gracias por todos los aportes |
#17
|
||||
|
||||
Esta función te puede servir:
Código:
void Crypt(void *Source, int Size, char* Clave, int Mod=0); Código:
#include "windows.h" #include <stdlib.h> // CopyRight escafandra // Rutina de encriptación Xor. // La misma rutina encripta y desencripta. // Clave clave en modo texto que se tratará como de 8 caracteres, 64 bits // Mod es el módulo restante para encriptaciones parciales // Si se encripta un buffer por partes, Mod es Size_encriptado%8 // donde Size_encriptado es el tamaño total de lo encriptado hasta ese momento. // Mod corrige el punto de comienzo del nuevo bloque a encriptar. void Crypt(void *Source, int Size, char* Clave, int Mod) { BYTE *source = (BYTE*)Source; BYTE clave[8]; int lClave = strlen(Clave); for(int n=0; n<8; n++) clave[n] = Clave[n%lClave]; for(int n=0; n<Size; n++, Mod++){ source[n] ^= clave[Mod%8]; } } Última edición por escafandra fecha: 12-09-2008 a las 12:15:32. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Uso de la funcion en delphi 7 | jedinds | OOP | 1 | 19-05-2008 04:00:32 |
Funcion Delphi en SQL | raverri | SQL | 10 | 16-07-2007 18:07:47 |
Traduccion de función VB a delphi !!! | Jan_polero | API de Windows | 2 | 07-02-2005 12:32:54 |
Funcion Nz en delphi?? | NuncaMas | Varios | 1 | 24-12-2003 14:51:31 |
funcion delphi | Ramon | Varios | 1 | 13-05-2003 12:45:03 |
|