delphi Base64转换(加密、解密)

发布时间 2023-09-23 10:24:47作者: txgh

Base64转换(加密、解密)

代码

字符串加密、解密

uses System.NetEncoding;

procedure TForm1.Button1Click(Sender: TObject);
var
  str1, str2: string;
begin
  //加密
  str1 := TNetEncoding.Base64.Encode('测试数据');
  Memo1.Lines.Add('加密数据 ' + str1);
  //解密
  str2 := TNetEncoding.Base64.Decode(str1);
  Memo1.Lines.Add('解密数据 ' + str2);
end;

D7中没有TBase64Encoding,通过EncdDecd单元的EncodeStringDecodeString实现

uses EncdDecd;

procedure TForm1.Button1Click(Sender: TObject);
var
  str1, str2: string;
begin
  //加密
  str1 := EncodeString('测试数据');
  Memo1.Lines.Add('加密数据 ' + str1);
  //解密
  str2 := DecodeString(str1);
  Memo1.Lines.Add('解密数据 ' + str2);
end;

D7中EncodeStringDecodeString函数需要转utf8编码,加密的数据与TBase64Encoding的一致

uses EncdDecd;

procedure TForm1.Button3Click(Sender: TObject);
var
  str1, str2: string;
begin
  //加密
  str1 := EncodeString(AnsiToUtf8('测试数据'));
  Memo1.Lines.Add('加密数据 ' + str1);
  //解密
  str2 := DecodeString(str1);
  Memo1.Lines.Add('解密数据 ' + Utf8ToAnsi(str2));
end;

文件加密、解密

uses System.NetEncoding;

procedure TForm1.Button2Click(Sender: TObject);
var
  Stream1, Stream3: TMemoryStream;
  Stream2, Stream4: TStringStream;
begin
  Stream1 := TMemoryStream.Create;
  Stream2 := TStringStream.Create;
  Stream3 := TMemoryStream.Create;
  Stream4 := TStringStream.Create;
  try
    //加密
    Stream1.LoadFromFile('C:\Users\Administrator\Desktop\ceshi.txt');
    TNetEncoding.Base64.Encode(Stream1, Stream2);
    Memo1.Lines.Add('加密数据 ');
    Memo1.Lines.Add(Stream2.DataString);
    //解密
    Stream4.WriteString(Stream2.DataString);
    Stream4.Position := 0;
    TNetEncoding.Base64.Decode(Stream4, Stream3);
    //解密后存为文件
    Stream3.SaveToFile('C:\Users\Administrator\Desktop\ceshi2.txt');
  finally
    Stream1.Free;
    Stream2.Free;
    Stream3.Free;
    Stream4.Free;
  end;
end;

D7中没有TBase64Encoding,通过EncdDecd单元的EncodeStreamDecodeStream实现

uses EncdDecd;

procedure TForm1.Button2Click(Sender: TObject);
var
  Stream1, Stream3: TMemoryStream;
  Stream2, Stream4: TStringStream;
begin
  Stream1 := TMemoryStream.Create;
  Stream2 := TStringStream.Create('');
  Stream3 := TMemoryStream.Create;
  Stream4 := TStringStream.Create('');
  try
    //加密
    Stream1.LoadFromFile('C:\Users\Administrator\Desktop\ceshi.txt');
    EncodeStream(Stream1, Stream2);
    Memo1.Lines.Add('加密数据 ');
    Memo1.Lines.Add(Stream2.DataString);
    //解密
    Stream4.WriteString(Stream2.DataString);
    Stream4.Position := 0;
    DecodeStream(Stream4, Stream3);
    //解密后存为文件
    Stream3.SaveToFile('C:\Users\Administrator\Desktop\ceshi2.txt');
  finally
    Stream1.Free;
    Stream2.Free;
    Stream3.Free;
    Stream4.Free;
  end;
end;

文件加密结果不含换行符

uses System.NetEncoding;

procedure TForm1.Button3Click(Sender: TObject);
var
  Stream1: TMemoryStream;
  Stream2: TStringStream;
  Base64: TBase64Encoding;
begin
  Stream1 := TMemoryStream.Create;
  Stream2 := TStringStream.Create;
  //设置不添加回车换行符
  Base64 := TBase64Encoding.Create(0);
  try
    //加密
    Stream1.LoadFromFile('C:\Users\Administrator\Desktop\ceshi.txt');
    Base64.Encode(Stream1, Stream2);
    Memo1.Lines.Add('加密数据(添加回车换行符)');
    Memo1.Lines.Add(Stream2.DataString);
  finally
    Stream1.Free;
    Stream2.Free;
    Base64.Free;
  end;
end;

方法

System.NetEncoding.TNetEncoding.Encode

function Encode(const Input, Output: TStream): Integer; overload;
function Encode(const Input: array of Byte): TBytes; overload;
function Encode(const Input: string): string; overload;

unit

System.NetEncoding

对输入数据进行编码并返回编码后的数据。

重载

Decode(string) Decode(array of Byte)

将分别以字符串或字节数组的形式返回编码后的数据。

Decode(TStream, TStream)

将编码后的数据保存到 Output 中,并返回写入到 Output 中的字节数。

System.NetEncoding.TNetEncoding.Decode

function Decode(const Input, Output: TStream): Integer; overload;
function Decode(const Input: array of Byte): TBytes; overload;
function Decode(const Input: string): string; overload;

unit

System.NetEncoding

对输入数据进行解码并返回解码后的数据。

重载

Decode(string) Decode(array of Byte)

将分别以字符串或字节数组的形式返回解码后的数据。

Decode(TStream, TStream)

将解码后的数据保存到 Output 中,并返回写入到 Output 中的字节数。

D7的EncodeString

unit

EncdDecd

对输入数据进行编码并返回编码后的数据。

D7的DecodeString

unit

EncdDecd

对输入数据进行解码并返回解码后的数据。