Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Encripta y DesEncripta (https://www.clubdelphi.com/foros/showthread.php?t=91681)

carlosCalle 01-04-2017 03:45:52

Encripta y DesEncripta
 
hola ..
tengo un problema con estas funciones y realmente no se como solucionarlo. tome dos funciones de aqui ..del club.....
Código Delphi [-]
function Encripta(sCadena:String):String;
var
    sRegreso : String;
    i, iTam : integer;
    szBuffer, szCadena : array[0..100] of char;
begin
    sRegreso := '';
    iTam := Length(sCadena);
    StrPCopy(szBuffer,sCadena);
    for i:=0 to iTam - 1 do
        szCadena[i] := Chr(Ord(szBuffer[i])+iTam);
    szCadena[iTam] := szBuffer[iTam];
    sRegreso := StrPas(szCadena);
    result := sRegreso;
end;


function DesEncripta(sCadena:String):String;
var
    sRegreso : String;
    i, iTam : integer;
    szBuffer, szCadena : array[0..100] of char;
begin
    sRegreso := '';
    iTam := Length(sCadena);
    StrPCopy(szBuffer,sCadena);
    for i := 0 to iTam - 1 do
        szCadena[i] := Chr(Ord(szBuffer[i])-iTam);
    szCadena[iTam] := szBuffer[iTam];
    sRegreso := StrPas(szCadena);
    result := sRegreso;
end;

el dato encriptado lo guardo en un archivo ini......y al DesEncriptar dicho dato no lo deja en el texto original...lo que quiero decir..por ejemplo
pongo mysql y lo encripta en esto r~xvq .....pero si coloco mysql-5 lo encripta de esta manera tzxs4< ......si se dan cuenta mysql-5 tiene 7 caracteres pero tzxs4< tiene 6....a simple vista pero entre tz parece que hay un caracter oculto.......buscando por ahi me dice que puede ser que quiero guardarlo en fromato unicode pero los archivos ini tienen codificacion ANSI.....espero su ayuda...gracias

AgustinOrtu 01-04-2017 06:30:36

Que version de Delphi? No tendras el hilo original donde estaba el codigo?

carlosCalle 01-04-2017 19:25:12

zorry....utilizo delphi xe7 creo que esas funciones estan para delphi 7 creo que lo saque del programa Ventas ¡¡¡¡¡

escafandra 01-04-2017 19:47:26

Es problema del Unicode. Prueba así:
Código Delphi [-]
function Encripta(sCadena: AnsiString): AnsiString;
var
    sRegreso : AnsiString;
    i, iTam : integer;
    szBuffer, szCadena : array[0..100] of AnsiChar;
begin
    sRegreso := '';
    iTam := Length(sCadena);
    StrPCopy(szBuffer,sCadena);
    for i:=0 to iTam - 1 do
        szCadena[i] := AnsiChar(Ord(szBuffer[i])+iTam);
    szCadena[iTam] := szBuffer[iTam];
    sRegreso := StrPas(szCadena);
    result := sRegreso;
end;


function DesEncripta(sCadena:AnsiString):AnsiString;
var
    sRegreso : AnsiString;
    i, iTam : integer;
    szBuffer, szCadena : array[0..100] of AnsiChar;
begin
    sRegreso := '';
    iTam := Length(sCadena);
    StrPCopy(szBuffer,sCadena);
    for i := 0 to iTam - 1 do
        szCadena[i] := AnsiChar(Ord(szBuffer[i])-iTam);
    szCadena[iTam] := szBuffer[iTam];
    sRegreso := StrPas(szCadena);
    result := sRegreso;
end;

Esto funciona igual en delphi7 pero en las versiones de delphi que priorizan el unicode, fuerza a usar AnsiChar con lo que los resultados de la encriptación son idénticos a como si usaras delphi7

Saludos.

mamcx 01-04-2017 19:51:03

Es mucho mejor que uses una libreria de encriptacion adecuada, y no codigo que vas "pegando" por ahi (en especial porque el codigo que pones NO ES ENCRIPTACION, es TOTALMENTE INSEGURO).

Bcrypt es uno de los algoritmos que se recomiendan a hoy:

https://github.com/JoseJimeniz/bcrypt-for-delphi

Si usas la libreria de Jedi, ellos tienen un wrapper para el CryptoAPI de MS, que es una libreria integrada en windows y muy recomendable (o puedes usar cualquier wrapper de la misma, no tiene que ser jedi)


La franja horaria es GMT +2. Ahora son las 06:50:51.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi