Ver Mensaje Individual
  #7  
Antiguo 20-09-2023
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Reputación: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Yo utilizo una unidad que utiliza las librerías de windows para hacer eso...
Pasa de Stream a string y el string está codificado en Base64
También decodifica.

Para utilizarlo con un string -> string deberás crear un TMemoryStream de la cadena (JSON) y pasárselo.

Código Delphi [-]
const
  CRYPT_STRING_BASE64 = 1;

function CryptBinaryToString(pbBinary: PByte; cbBinary: DWORD; dwFlags: DWORD; pszString: PChar; var pcchString: DWORD): BOOL; stdcall;
  external 'Crypt32.dll' Name 'CryptBinaryToStringA';

function CryptStringToBinary(pszString: PChar; cchString: DWORD; dwFlags: DWORD; pbBinary: PByte; var pcbBinary: DWORD; pdwSkip: PDWORD; pdwFlags: PDWORD): BOOL; stdcall;
  external 'Crypt32.dll' Name 'CryptStringToBinaryA';

//---------------------------------------------------------------------------
// Codifica un TMemoryStrean a cadena Encode64
function StreamToStrB64(MStream: TMemoryStream; var Str: string): boolean;
var
  Size : DWORD;
begin
  Result := CryptBinaryToString(MStream.Memory, MStream.Size, CRYPT_STRING_BASE64, 0, Size);
  if Result then
  begin
     SetLength(Str, Size);
     Result := CryptBinaryToString(MStream.Memory, MStream.Size, CRYPT_STRING_BASE64, @Str[1], Size);
  end;
end;

//---------------------------------------------------------------------------
// Decodifica una cadena Encode64 a su binario original en un TMemoryStream
function StrB64ToStream(var Str: string; MStream: TMemoryStream): boolean;
var
  Size : DWORD;
begin
  Result := CryptStringToBinary(@Str[1], Length(Str), CRYPT_STRING_BASE64, 0, Size, nil, nil);
  if Result then
  begin
     MStream.SetSize(Size);
     Result := CryptStringToBinary(@Str[1], Length(Str), CRYPT_STRING_BASE64, MStream.Memory, Size, nil, nil);
  end;
end;
Responder Con Cita