Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Encriptación. (https://www.clubdelphi.com/foros/showthread.php?t=38901)

Redneck 03-01-2007 22:43:25

Encriptación.
 
Primero que todo les deseo un feliz año nuevo a todos los miembros de la página y los felicito por llevar el sitio de lo mas actualizado posible.

Bien, tengo una funcion que encripta una cadena, pero está en Visual Basic, traté de pasarla a Delphi pero los resultados no fueron los mismos:

Acá la función Visual:

Public Function xDecrypt$(Strg$, PASSWORD$)
Dim b$, s$, i As Long, j As Long
Dim A1 As Long, A2 As Long, A3 As Long, P$ as Long
j = 1
For i = 1 To Len(PASSWORD$)
P$ = P$ & Asc(Mid$(PASSWORD$, i, 1))
Next
For i = 1 To Len(Strg$) Step 2
A1 = Asc(Mid$(P$, j, 1))
j = j + 1: If j > Len(P$) Then j = 1
b$ = Mid$(Strg$, i, 2)
A3 = Val("&H" + b$)
A2 = A1 Xor A3
s$ = s$ + Chr$(A2)
Next
xDecrypt$ = s$
End Function


donde la PASSWORD es 'c' y Strg es 74606A780C0C el resultado debiera ser MYSA55. Logré llegar a esto cuando la pasé a Delphi:

procedure TForm1.Button2Click(Sender: TObject);
var
a1,a2,a3,s,i,j : LongInt;
// a2,a3 : Double;
cadena,pass,p,h,b : String;
// j : Integer;
z,code : INteger;
begin
pass := edit2.Text;
cadena := edit1.Text;
j := 1;
For i := 1 To Length(pass) Do
P := P + IntToStr(Ord(Copy(pass,i,1)[1]));

i:=1;
While i <= Length(cadena) Do
Begin
A1 := Ord(Copy(P,J,1)[1]);
j := j + 1;
If j > Length(P) Then
j := 1;
b := Copy(cadena,i,2);
Val('$H' + b,z,code);
A3 := z;
A2 := A1 Xor A3;
s := s + StrToInt(Chr(A2));
i := i + 2;
end;

edit3.Text := IntToStr(s);

end;


Pero me da como resultado 54 :confused: agradezco sus comentarios para poder migrar la función a delphi y funcione bien.

De antemano muchas gracias.

BuenaOnda 03-01-2007 22:49:03

Componentes para encriptacion
 
Hola... sabes yo tengo unos componentes super buenos para realizar una encriptacion profesional, si los quieres contactame a mi crreo smith_visual@hotmail.com para poder enviartelos..:)

vtdeleon 03-01-2007 23:35:39

Que tal si lo publicas aqui y/o lo compartes(*) con todos? ;)

(*)Siempre que sean componentes libres o tuyos.

seoane 03-01-2007 23:50:59

Prueba con esto:
Código Delphi [-]
function Decrypt(Str, Password: string): string;
var
  i: integer;
  S: string;
begin
  S:= EmptyStr;
  for i:= 1 to Length(Password) do
    S:= S + IntToStr(Ord(Password[i]));
  i:= 0;
  Result:= Emptystr;
  while Length(Str) > 0 do
  begin
    i:= (i mod Length(S)) + 1;
    Result:= Result + Chr(StrToInt('$'+Copy(Str,1,2)) xor Ord(S[i]));
    Delete(Str,1,2);
  end;
end;

// Por ejemplo
ShowMessage(Decrypt('74606A780C0C','c'));

egostar 04-01-2007 00:04:52

Seoane, solo que yo veo un error al traducir el código

en la linea

Cita:

P$ = P$ & Asc(Mid$(PASSWORD$, i, 1))
Estan convirtiendola así

Código Delphi [-]
 
S:= S + IntToStr(Ord(Password[i]));

Y estan usando una suma en lugar de AND, eso cambia todo el resultado.

Saludos.

seoane 04-01-2007 00:10:27

Cita:

Empezado por egostar
Y estan usando una suma en lugar de AND, eso cambia todo el resultado.

Creo recordar, de la época en que me toco usar el Vb, que el operador & sirve para concatenar cadenas. Es decir que mi traducción es correcta, para mas información, lee un manual de visual basic ;)

egostar 04-01-2007 00:14:03

Cita:

Empezado por seoane
lee un manual de visual basic ;)

ok ok, entendido y anotado:D

Saludos

BuenaOnda 04-01-2007 14:18:40

problema al subir los componentes
 
Tplockbox.zip:
Your file of 1,01 MB bytes exceeds the forum's limit of 29,3 KB for this filetype.

este errr me apaece al intentar subir los componentes de encriptacion... alguien me puede decir como los puedo subir para compartirlos con todos Uds..?? :)

dec 04-01-2007 14:29:16

Hola,

Los archivos que pueden adjuntarse en los hilos de los foros están limitados en tamaño. Por el momento tendrías que enlazar la URL desde la que descargar el archivo en cuestión. Si no dispones de espacio Web puedes utilizar algún servicio gratuito que te lo proporcione: en Genbeta se listan algunos.

Por otro lado, y si lo prefieres, puedes enviarme el archivo a la dirección de correo: davidesperalta (ARROBA) gmail.com

Yo me encargaré de subirlo a mi espacio Web en el ClubDelphi y pondré aquí mismo la URL desde la que podrán descargarse los componentes.

Lo dejo a tu elección. Si tienes algún otro comentario no dudes en hacerlo. :)

BuenaOnda 04-01-2007 14:48:09

ahora si...
 
amigos estos son los componentes de encriptacion http://files.to/get/323241/29686/Tplockbox.zip

para utilizarlos deben incluir las librerias de los componentes en el USES (sin colocar ningun compoente sobre algun DataModule o Form)

implementation

{$R *.dfm}
Uses LbCipher,LbString;
type
TEncryption = (eBf, eBfCbc, eDes, eDesCbc, e3Des, e3DesCbc, eRdl,
eRdlCbc);

Var { Definimos las variables para la Encriptación... }
Key64 : TKey64;
Key128 : TKey128;
Key192 : TKey192;
Key256 : TKey256;


luego debemos escribir las Funciones para Encriptar y Desencriptar :


function Encriptar(eTexto, Clave: String): String;
var
txtEncriptado : String;
begin
txtEncriptado:='';
Reactivar(Clave); //
txtEncriptado:=RDLEncryptStringCBCEx(eTexto,Key64,16,True);
Result:=txtEncriptado;
end;


function Desencriptar(dTexto, Clave: String): String;
var
tDesEncriptado : String;
begin
tDesEncriptado:='';
Reactivar(Clave); //
tDesEncriptado:=RDLEncryptStringCBCEx(dTexto,Key64,16,False);
Result:=tDesEncriptado;
end;


procedure .Reactivar(pClave: String);
begin
GenerateLMDKey(Key64,SizeOf(Key64),pClave);
GenerateLMDKey(Key128,SizeOf(Key128),pClave);
GenerateLMDKey(Key192,SizeOf(Key192),pClave);
GenerateLMDKey(Key256,SizeOf(Key256),pClave);
end;


El parámetro "Clave", utilizado en las funciones "Encriptar y Desencriptar" nos indica cual sera la "Clave" en la que se basará nuestra encriptación...

okas.. espero que les sirva... :D

Redneck 04-01-2007 15:17:56

Muchas gracias a todos por su pronta respuesta

roman 04-01-2007 19:17:58

La página del proyecto TurboPower LockBox:

http://sourceforge.net/projects/tplockbox

// Saludos


La franja horaria es GMT +2. Ahora son las 04:06:18.

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