平仄平仄平平仄 發表於 2023-9-23 10:15:00

delphi Base64转换(加密、解密)

<h1 id="base64转换加密解密">Base64转换(加密、解密)</h1>
<h2 id="代码">代码</h2>
<h3 id="字符串加密解密">字符串加密、解密</h3>
<pre><code class="language-delphi">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;
</code></pre>
<p>D7中没有<code>TBase64Encoding</code>,通过<code>EncdDecd</code>单元的<code>EncodeString</code>和<code>DecodeString</code>实现</p>
<pre><code class="language-delphi">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;
</code></pre>
<p>D7中<code>EncodeString</code>和<code>DecodeString</code>函数需要转utf8编码,加密的数据与<code>TBase64Encoding</code>的一致</p>
<pre><code class="language-delphi">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;
</code></pre>
<h3 id="文件加密解密">文件加密、解密</h3>
<pre><code class="language-delphi">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;
</code></pre>
<p>D7中没有<code>TBase64Encoding</code>,通过<code>EncdDecd</code>单元的<code>EncodeStream</code>和<code>DecodeStream</code>实现</p>
<pre><code class="language-delphi">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;
</code></pre>
<p>文件加密结果不含换行符</p>
<pre><code class="language-delphi">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;
</code></pre>
<h2 id="方法">方法</h2>
<h3 id="systemnetencodingtnetencodingencode">System.NetEncoding.TNetEncoding.Encode</h3>
<pre><code class="language-delphi">function Encode(const Input, Output: TStream): Integer; overload;
function Encode(const Input: array of Byte): TBytes; overload;
function Encode(const Input: string): string; overload;
</code></pre>
<p><strong>unit</strong></p>
<p>System.NetEncoding</p>
<p>对输入数据进行编码并返回编码后的数据。</p>
<p><strong>重载</strong></p>
<p><code>Decode(string)</code> <code>Decode(array of Byte)</code></p>
<p>将分别以字符串或字节数组的形式返回编码后的数据。</p>
<p><code>Decode(TStream, TStream)</code></p>
<p>将编码后的数据保存到 <em>Output</em> 中,并返回写入到 <em>Output</em> 中的字节数。</p>
<h3 id="systemnetencodingtnetencodingdecode">System.NetEncoding.TNetEncoding.Decode</h3>
<pre><code class="language-delphi">function Decode(const Input, Output: TStream): Integer; overload;
function Decode(const Input: array of Byte): TBytes; overload;
function Decode(const Input: string): string; overload;
</code></pre>
<p><strong>unit</strong></p>
<p>System.NetEncoding</p>
<p>对输入数据进行解码并返回解码后的数据。</p>
<p><strong>重载</strong></p>
<p><code>Decode(string)</code> <code>Decode(array of Byte)</code></p>
<p>将分别以字符串或字节数组的形式返回解码后的数据。</p>
<p><code>Decode(TStream, TStream)</code></p>
<p>将解码后的数据保存到 <em>Output</em> 中,并返回写入到 <em>Output</em> 中的字节数。</p>
<h3 id="d7的encodestring">D7的EncodeString</h3>
<p><strong>unit</strong></p>
<p>EncdDecd</p>
<p>对输入数据进行编码并返回编码后的数据。</p>
<h3 id="d7的decodestring">D7的DecodeString</h3>
<p><strong>unit</strong></p>
<p>EncdDecd</p>
<p>对输入数据进行解码并返回解码后的数据。</p><br><br>
来源:https://www.cnblogs.com/txgh/p/17723957.html
頁: [1]
查看完整版本: delphi Base64转换(加密、解密)