Base64是网络上最常见的用于加密传输8Bit字节代码的编码方式之一,网上搜索,.NET、C/C++的代码到处都是,可没找到Delphi的,本人写了2个函数,可供访问者参考使用。(注:后来,我觉得这2个函数灵活性太差,进行了修改,见《Delphi版的Base64转换函数(修改版) 》)
unitBase64;
interface
usesSysUtils;
functionStrToBase64(conststr:string):string;
functionBase64ToStr(constBase64:string):string;
implementation
//const
//Base64_Chars='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
functionStrToBase64(constStr:string):string;
var
I,J,K,Len,Len1:Integer;
B3:array[0..2]ofByte;
B4:array[0..3]ofByte;
begin
ifStr=''then
begin
Result:='';
Exit;
end;
Len:=Length(Str);
Len1:=((Len+2)div3)shl2;
SetString(Result,nil,Len1);
I:=1;
J:=1;
whileI<=Lendo
begin
forK:=0to2do
ifK+I>LenthenB3[K]:=0
elseB3[K]:=Ord(Str[K+I]);
B4[0]:=B3[0]shr2;
B4[1]:=((B3[0]shl4)or(B3[1]shr4))and63;
B4[2]:=((B3[1]shl2)or(B3[2]shr6))and63;
B4[3]:=B3[2]and63;
forK:=0to3do
begin
caseB4[K]of
0..25:Result[J]:=Chr(B4[K]+65);//'A'..'Z'
26..51:Result[J]:=Chr(B4[K]+71);//'a'..'z'(B4[K]-26+97)
62:Result[J]:='+';
63:Result[J]:='/';
elseResult[J]:=Chr(B4[K]-4);//'0'..'9'(B4[K]-52+48)
end;
//Result[J]:=Base64_Chars[B4[K]+1];
Inc(J);
end;
Inc(I,3);
end;
K:=3-Lenmod3-1;
ifK<>2then
forI:=Len1-KtoLen1do
Result[I]:='=';
end;
functionBase64ToStr(constBase64:string):string;
var
I,J,K,Len,Len1:Integer;
B4:array[0..3]ofByte;
begin
ifBase64=''then
begin
Result:='';
Exit;
end;
Len:=Length(Base64);
ifLenand3<>0then
raiseException.Create('InvalidBase64length');
Len1:=(Lenshr2)*3;
SetString(Result,nil,Len1);
I:=1;
J:=1;
whileI<=Lendo
begin
forK:=0to3do
begin
caseBase64[I]of
'A'..'Z':B4[K]:=Ord(Base64[I])-65;
'a'..'z':B4[K]:=Ord(Base64[I])-71;
'0'..'9':B4[K]:=Ord(Base64[I])+4;
'+':B4[K]:=62;
'/':B4[K]:=63;
'=':B4[K]:=0;
elseraiseException.CreateFmt('#%d:InvalidcharinBase64',[Ord(Base64[I])]);
end;
Inc(I);
end;
Result[J]:=Chr((B4[0]shl2)or(B4[1]shr4));
Result[J+1]:=Chr((B4[1]shl4)or(B4[2]shr2));
Result[J+2]:=Chr((B4[2]shl6)orB4[3]);
Inc(J,3);
end;
I:=Pos('=',Base64);
ifI<>0then
begin
I:=Len-I+1;
Delete(Result,Len1-I+1,I);
end;
end;
end.
使用indy9的MD5类测试,测试如下:
unitmain;
interface
uses
Windows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,
Dialogs,StdCtrls;
type
TForm1=class(TForm)
Button1:TButton;
procedureButton1Click(Sender:TObject);
private
...{Privatedeclarations}
public
...{Publicdeclarations}
end;
var
Form1:TForm1;
implementation
usesBase64,IdHash,IdHashMessageDigest;
...{$R*.dfm}
procedureTForm1.Button1Click(Sender:TObject);
var
md5:TIdHashMessageDigest5;
Value:T4x4LongWordRecord;
s,s1:string;
begin
md5:=TIdHashMessageDigest5.Create;
try
Value:=md5.HashValue('Maozefa');//得到MD5值
SetLength(s1, 16); // 设置s1长度为16
Move(Value, s1[1], 16); // 将Value拷贝到s1中
s := StrToBase64(s1); // 得到MD5值的Base64
s1:=md5.AsHex(value);//转换为十六进制字串
ShowMessage('Base64:'+s+#10+'Hex:'+s1);//显示结果
s:=Base64ToStr(s);//还原为MD5原值字串
Move(s[1],Value,16);//转换为MD5原值
s1:=md5.AsHex(value);//MD5原值转换为十六进制字串
//显示还原结果,因s为原始MD5值,所以显示为乱码,但是16进制码与转换前是相同的
ShowMessage('string:'+s+#10+'Hex:'+s1);
finally
md5.Free;
end;
end;
end.
测试结果:
Base64: dPV9boIqSOmu861RyPB+WQ==
Hex: 74F57D6E822A48E9AEF3AD51C8F07E59
string: t鮹n?H楫蟓Q瑞~Y
Hex: 74F57D6E822A48E9AEF3AD51C8F07E59
分享到:
相关推荐
在Delphi中,我们可以使用内置的`System.NetEncoding`单元或者自定义函数来实现Base64的转换。`System.NetEncoding`提供了`TNetEncoding.Base64`类,它包含了`Encode`和`Decode`方法,分别用于Base64编码和解码。 1...
function Base64ToImage(const base64:string;AImage:TImage):Boolean; function Base64ToImageFile(const base64:string;AImagefile:string):Boolean; function CheckImgTypeBase64(abase64:string):string;
在IT行业中,Base64是一种广泛使用的数据编码方式,它将任意二进制数据转换成ASCII字符串形式,以便在网络上传输或存储。标题"delphi2010 base64_encode&decode"指的是使用Delphi 2010编程环境实现的Base64编码和...
在Delphi编程环境下,开发人员经常需要将图片转换成Base64字符串,以便在网络上传输或者存储在数据库中。下面我们将详细讲解如何在Delphi中实现这个功能。 首先,我们需要理解Base64编码的基本原理。Base64编码是...
在Delphi7中,虽然没有内置的BASE64函数,但开发者可以利用汇编语言编写高效的算法来实现这一功能。汇编语言的使用可以更直接地操控计算机硬件,从而在某些情况下提高程序执行速度。对于那些对性能有极高要求的应用...
2. **Delphi中的Base64库**:在Delphi中,`System.NetEncoding`单元提供了一个名为`TNetEncoding.Base64`的类,该类包含`Encode`和`Decode`方法,用于Base64编码和解码。例如,你可以使用以下代码进行Base64编码: ...
2. **解码函数**:对应地,`Base64Decode`函数用于将Base64字符串转换回原始的字节数组。这个函数会检查输入字符串的格式,确保它是有效的Base64编码,并且能够正确解码。 3. **类接口**:有时,Base64处理会被封装...
在IT行业中,Base64是一种广泛使用的数据编码方式,它将任意二进制数据转换成ASCII字符序列,便于在网络上传输。本主题聚焦于在Delphi编程环境中如何使用Base64进行编码和解码,以及在与其他语言对接时可能遇到的...
在Delphi中,我们可以使用内置的`System.NetEncoding`单元或者自定义函数来实现Base64的编码和解码。`System.NetEncoding`提供了`TNetEncoding.Base64`类,包含了`Encode`和`Decode`方法,可以方便地进行Base64的...
在Delphi编程环境中,我们可以使用Base64编码来实现文件的序列化,即将文件内容转换成一个字符串,然后再从这个字符串中恢复出原始的文件数据,这在处理XML文档、HTTP请求或JSON数据时特别有用。 首先,让我们理解...
Base64是一种用于在网络上传输二进制数据的编码方式,它将任意的二进制数据转换成可打印的ASCII字符序列。这个过程通常用于在邮件系统、HTTP头部或者HTML中传输图片、文档等非文本内容。在描述的场景中,我们有两个...
Base64是一种用于将二进制数据转换为ASCII字符的编码方式,常用于在电子邮件等文本环境中传输非文本数据。DLL文件是Windows操作系统中的共享库,它包含可被其他程序调用的函数,可以提高代码重用性并减小程序体积。 ...
Delphi的标准库中并没有内置的Base64编码函数,但你可以使用第三方库,如Indy或Synapse,它们提供了Base64编码的接口。或者,你可以自定义一个函数,利用字符串操作来实现Base64编码算法。 4. **保存为文本**:编码...
在计算机科学中,尤其是编程领域,我们经常需要将字符串和Base64编码进行互相转换。下面我们将详细探讨这个过程: 1. **字符串到Base64的转化**: 当我们需要将一个字符串(通常由ASCII字符组成)编码为Base64时,...
在Delphi中实现MD5+Base64加密,可以使用System.Classes单元中的TIdHashMD5类进行MD5哈希计算,然后使用System.NetEncoding单元中的TNetEncoding.Base64类进行Base64编码。以下是一个简单的示例: ```delphi uses ...
这里,`TBytes`是Delphi中用于表示字节数组的类型,`EncodeBase64`和`DecodeBase64`是预定义的函数,分别用于Base64编码和解码。复制粘贴这个代码到你的项目中,就可以直接使用Base64功能,无需从头实现算法。 在...
在"base64图片转换.rar"这个压缩包中,很可能包含了一个用Delphi编程语言编写的工具,该工具实现了Base64编码和解码的功能,专门针对图片处理,方便用户在处理图片时将其转化为Base64格式或者将Base64字符串还原为...
在Delphi中,` Indy `库提供了方便的函数来进行BASE64的编码和解码。例如,你可以使用` TIdEncoderMIME `类的` Encode `和` Decode `方法: ```delphi uses IdEncoderMIME; var BinaryData: TBytes; Base64...
SHA.exe、HMAC.exe、BASE64.exe、URL.exe、MD5.exe这些文件可能是使用Delphi编写的独立可执行程序,分别对应实现了SHA加密、HMAC-SHA签名、Base64编码与解码、URL编码与解码以及MD5加密的功能。
本话题主要聚焦于一个由Delphi编写的ActiveX插件,其核心功能是从剪切板中提取图片并转换为Base64String编码的字符串,以便更方便地在网络应用中传输和存储。 首先,我们来理解Delphi。Delphi是一款强大的Object ...