查看: 9|回复: 0

delphi Base64转换(加密、解密)

[复制链接]

0

主题

0

回帖

0

积分

热心网友

金币
0
阅读权限
220
精华
0
威望
0
贡献
0
在线时间
0 小时
注册时间
2011-8-3
发表于 2023-9-23 10:15:00 | 显示全部楼层 |阅读模式

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

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



来源:https://www.cnblogs.com/txgh/p/17723957.html
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

相关侵权、举报、投诉及建议等,请发 E-mail:qiongdian@foxmail.com

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部