Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo Hace 1 Semana
darkamerico darkamerico is offline
Miembro
 
Registrado: dic 2010
Posts: 251
Poder: 14
darkamerico Va por buen camino
Red face Traducir esta función de Encriptación de C# a Delphi

Saludos amigos,
Estoy realizando la integración mediante un modulo que haré en Delphi a un sistema que está en C#, ellos usan estas funciones para encriptar y decriptar:

Código:
private string Encrypt(string clearText)
{
            string EncryptionKey = "MAKV2SPBNI99212";
            byte[] clearBytes = Encoding.Unicode.GetBytes(clearText);
            using (Aes encryptor = Aes.Create())
            {
                Rfc2898DeriveBytes pdb = new Rfc2898DeriveBytes(EncryptionKey, new byte[] { 0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d, 0x65, 0x64, 0x76, 0x65, 0x64, 0x65, 0x76 });
                encryptor.Key = pdb.GetBytes(32);
                encryptor.IV = pdb.GetBytes(16);
                using (MemoryStream ms = new MemoryStream())
                {
                    using (CryptoStream cs = new CryptoStream(ms, encryptor.CreateEncryptor(), CryptoStreamMode.Write))
                    {
                        cs.Write(clearBytes, 0, clearBytes.Length);
                        cs.Close();
                    }
                    clearText = Convert.ToBase64String(ms.ToArray());
                }
            }
            return clearText;
        }

        private string Decrypt(string cipherText)
        {
            string EncryptionKey = "MAKV2SPBNI99212";
            byte[] cipherBytes = Convert.FromBase64String(cipherText);
            using (Aes encryptor = Aes.Create())
            {
                Rfc2898DeriveBytes pdb = new Rfc2898DeriveBytes(EncryptionKey, new byte[] { 0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d, 0x65, 0x64, 0x76, 0x65, 0x64, 0x65, 0x76 });
                encryptor.Key = pdb.GetBytes(32);
                encryptor.IV = pdb.GetBytes(16);
                using (MemoryStream ms = new MemoryStream())
                {
                    using (CryptoStream cs = new CryptoStream(ms, encryptor.CreateDecryptor(), CryptoStreamMode.Write))
                    {
                        cs.Write(cipherBytes, 0, cipherBytes.Length);
                        cs.Close();
                    }
                    cipherText = Encoding.Unicode.GetString(ms.ToArray());
                }
            }
            return cipherText;
        }
Podría alguien echarme una mano con la unidad con el código Delphi de ellas?.
Muy Agradecido

Americo

Última edición por dec fecha: Hace 1 Semana a las 18:25:52. Razón: Poner etiquetas CODE
Responder Con Cita
  #2  
Antiguo Hace 1 Semana
darkamerico darkamerico is offline
Miembro
 
Registrado: dic 2010
Posts: 251
Poder: 14
darkamerico Va por buen camino
Red face En Imagen

Para mejor visualización:



Atte
Americo
Responder Con Cita
  #3  
Antiguo Hace 1 Semana
marco3k marco3k is offline
Miembro
 
Registrado: feb 2015
Posts: 73
Poder: 10
marco3k Va por buen camino
Bueno gogleando un poco en www hay convertidores de código y encontré este:
https://www.codeconvert.ai/csharp-to-pascal-converter


y el resultado es este:



Código Delphi [-]
uses
  System.SysUtils,
  System.Classes,
  System.Crypto,
  System.Convert;

function Encrypt(clearText: string): string;
var
  EncryptionKey: string;
  clearBytes: TBytes;
  encryptor: TAesManaged;
  pdb: TRfc2898DeriveBytes;
  ms: TMemoryStream;
  cs: TCryptoStream;
begin
  EncryptionKey := 'MAKV2SPBNI99212';
  clearBytes := TEncoding.Unicode.GetBytes(clearText);
  encryptor := TAesManaged.Create;
  try
    pdb := TRfc2898DeriveBytes.Create(EncryptionKey, [0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d, 0x65, 0x64, 0x76, 0x65, 0x64, 0x65, 0x76]);
    encryptor.Key := pdb.GetBytes(32);
    encryptor.IV := pdb.GetBytes(16);
    ms := TMemoryStream.Create;
    try
      cs := TCryptoStream.Create(ms, encryptor.CreateEncryptor, CryptoStreamMode.Write);
      try
        cs.Write(clearBytes, 0, Length(clearBytes));
      finally
        cs.Free;
      end;
      clearText := TBase64Encoding.UTF8.EncodeToString(ms.ToArray);
    finally
      ms.Free;
    end;
  finally
    encryptor.Free;
  end;
  Result := clearText;
end;

function Decrypt(cipherText: string): string;
var
  EncryptionKey: string;
  cipherBytes: TBytes;
  encryptor: TAesManaged;
  pdb: TRfc2898DeriveBytes;
  ms: TMemoryStream;
  cs: TCryptoStream;
begin
  EncryptionKey := 'MAKV2SPBNI99212';
  cipherBytes := TBase64Encoding.UTF8.DecodeToBytes(cipherText);
  encryptor := TAesManaged.Create;
  try
    pdb := TRfc2898DeriveBytes.Create(EncryptionKey, [0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d, 0x65, 0x64, 0x76, 0x65, 0x64, 0x65, 0x76]);
    encryptor.Key := pdb.GetBytes(32);
    encryptor.IV := pdb.GetBytes(16);
    ms := TMemoryStream.Create;
    try
      cs := TCryptoStream.Create(ms, encryptor.CreateDecryptor, CryptoStreamMode.Write);
      try
        cs.Write(cipherBytes, 0, Length(cipherBytes));
      finally
        cs.Free;
      end;
      cipherText := TEncoding.Unicode.GetString(ms.ToArray);
    finally
      ms.Free;
    end;
  finally
    encryptor.Free;
  end;
  Result := cipherText;
end.


Tendrias que probarlo...
Responder Con Cita
  #4  
Antiguo Hace 1 Semana
darkamerico darkamerico is offline
Miembro
 
Registrado: dic 2010
Posts: 251
Poder: 14
darkamerico Va por buen camino
Unhappy

El código presenta varios errores, de igual modo intente con ChatGPT y ninguno corre.
Responder Con Cita
  #5  
Antiguo Hace 1 Semana
marco3k marco3k is offline
Miembro
 
Registrado: feb 2015
Posts: 73
Poder: 10
marco3k Va por buen camino
Cita:
Empezado por darkamerico Ver Mensaje
El código presenta varios errores, de igual modo intente con ChatGPT y ninguno corre.
Pues depuralo paso a paso y ahi notaras en que parte falla y asi vas corrigiendo.
Responder Con Cita
  #6  
Antiguo Hace 1 Semana
marco3k marco3k is offline
Miembro
 
Registrado: feb 2015
Posts: 73
Poder: 10
marco3k Va por buen camino
Yo empezaría primero de que librerías salen esas funciones en c# y luego ver los tipos de datos son equivalentes. Pude ocurrir que esas librerias no existan en delphi y entonces el traductor puso algunas que cree que seria equivalentes. Y si en el caso esas librerías sólo existen en c# tocara llamarlos desde delphi.
Responder Con Cita
  #7  
Antiguo Hace 1 Semana
darkamerico darkamerico is offline
Miembro
 
Registrado: dic 2010
Posts: 251
Poder: 14
darkamerico Va por buen camino
Cita:
Empezado por marco3k Ver Mensaje
Pues depuralo paso a paso y ahi notaras en que parte falla y así vas corrigiendo.
precisamente el problema es que, como dices, estas unidades, no existen en Delphi.
Responder Con Cita
  #8  
Antiguo Hace 1 Semana
marco3k marco3k is offline
Miembro
 
Registrado: feb 2015
Posts: 73
Poder: 10
marco3k Va por buen camino
Cita:
Empezado por darkamerico Ver Mensaje
precisamente el problema es que, como dices, estas unidades, no existen en Delphi.
Entonces si tienes las fuentes en c# ahi encontraras las librerías en la parte superior del archivo donde estan esas funciones.

Cita:
Podría alguien echarme una mano con la unidad con el código Delphi de ellas?.
Debes identificarlo tu mismo, porque tienes acceso a los fuentes c#. Como viste el convertidor online se equivoco.

Aqui hay un tema al respecto de encriptar y desencriptar en delphi:
https://www.clubdelphi.com/foros/showthread.php?t=79262

Última edición por marco3k fecha: Hace 1 Semana a las 15:16:51.
Responder Con Cita
  #9  
Antiguo Hace 1 Semana
darkamerico darkamerico is offline
Miembro
 
Registrado: dic 2010
Posts: 251
Poder: 14
darkamerico Va por buen camino
Thumbs up

Cita:
Empezado por marco3k Ver Mensaje
Entonces si tienes las fuentes en c# ahi encontraras las librerías en la parte superior del archivo donde estan esas funciones.


Debes identificarlo tu mismo, porque tienes acceso a los fuentes c#. Como viste el convertidor online se equivoco.

Aqui hay un tema al respecto de encriptar y desencriptar en delphi:
https://www.clubdelphi.com/foros/showthread.php?t=79262
Gracias amigo
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Problema con encriptación php <-> Delphi Reasen Delphi para la web 6 29-12-2015 18:10:47
Encriptación con AES en Delphi 7 nlsgarcia Varios 3 01-09-2011 07:36:20
Encriptacion MD5+RSA en delphi jourdan OOP 9 24-03-2010 01:01:08
Traducir llamado a funcion juanelo C++ Builder 9 28-01-2010 21:11:11
Traducir Un chat que está en Inglés Luis F. Orjuela Internet 2 26-02-2004 01:55:03


La franja horaria es GMT +2. Ahora son las 21:42:41.


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
Copyright 1996-2007 Club Delphi