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';
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;
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;