![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
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. |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
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 |
|