`
sogotobj
  • 浏览: 645698 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Delphi版的Base64转换函数

阅读更多

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版的Base64互相转换函数

    在Delphi中,我们可以使用内置的`System.NetEncoding`单元或者自定义函数来实现Base64的转换。`System.NetEncoding`提供了`TNetEncoding.Base64`类,它包含了`Encode`和`Decode`方法,分别用于Base64编码和解码。 1...

    Delphi源码,图片转base64及base64转图片函数

    function Base64ToImage(const base64:string;AImage:TImage):Boolean; function Base64ToImageFile(const base64:string;AImagefile:string):Boolean; function CheckImgTypeBase64(abase64:string):string;

    delphi2010 base64_encode&decode

    在IT行业中,Base64是一种广泛使用的数据编码方式,它将任意二进制数据转换成ASCII字符串形式,以便在网络上传输或存储。标题"delphi2010 base64_encode&decode"指的是使用Delphi 2010编程环境实现的Base64编码和...

    delphi图片转base64

    在Delphi编程环境下,开发人员经常需要将图片转换成Base64字符串,以便在网络上传输或者存储在数据库中。下面我们将详细讲解如何在Delphi中实现这个功能。 首先,我们需要理解Base64编码的基本原理。Base64编码是...

    BASE64——Delphi程序

    在Delphi7中,虽然没有内置的BASE64函数,但开发者可以利用汇编语言编写高效的算法来实现这一功能。汇编语言的使用可以更直接地操控计算机硬件,从而在某些情况下提高程序执行速度。对于那些对性能有极高要求的应用...

    delphi_base64

    2. **Delphi中的Base64库**:在Delphi中,`System.NetEncoding`单元提供了一个名为`TNetEncoding.Base64`的类,该类包含`Encode`和`Decode`方法,用于Base64编码和解码。例如,你可以使用以下代码进行Base64编码: ...

    Delphi base64单元

    2. **解码函数**:对应地,`Base64Decode`函数用于将Base64字符串转换回原始的字节数组。这个函数会检查输入字符串的格式,确保它是有效的Base64编码,并且能够正确解码。 3. **类接口**:有时,Base64处理会被封装...

    Delphi Base64 演示及躲坑

    在IT行业中,Base64是一种广泛使用的数据编码方式,它将任意二进制数据转换成ASCII字符序列,便于在网络上传输。本主题聚焦于在Delphi编程环境中如何使用Base64进行编码和解码,以及在与其他语言对接时可能遇到的...

    Delphi Base64 加密解密源码

    在Delphi中,我们可以使用内置的`System.NetEncoding`单元或者自定义函数来实现Base64的编码和解码。`System.NetEncoding`提供了`TNetEncoding.Base64`类,包含了`Encode`和`Decode`方法,可以方便地进行Base64的...

    Delphi用Base64编码实现文件序列化

    在Delphi编程环境中,我们可以使用Base64编码来实现文件的序列化,即将文件内容转换成一个字符串,然后再从这个字符串中恢复出原始的文件数据,这在处理XML文档、HTTP请求或JSON数据时特别有用。 首先,让我们理解...

    base64字符串和图片的相互转换

    Base64是一种用于在网络上传输二进制数据的编码方式,它将任意的二进制数据转换成可打印的ASCII字符序列。这个过程通常用于在邮件系统、HTTP头部或者HTML中传输图片、文档等非文本内容。在描述的场景中,我们有两个...

    一个用Delphi写的Base64编码DLL以及PB调用例子

    Base64是一种用于将二进制数据转换为ASCII字符的编码方式,常用于在电子邮件等文本环境中传输非文本数据。DLL文件是Windows操作系统中的共享库,它包含可被其他程序调用的函数,可以提高代码重用性并减小程序体积。 ...

    图片Base64编码后存为文本,delphi程序源码

    Delphi的标准库中并没有内置的Base64编码函数,但你可以使用第三方库,如Indy或Synapse,它们提供了Base64编码的接口。或者,你可以自定义一个函数,利用字符串操作来实现Base64编码算法。 4. **保存为文本**:编码...

    base64与字符串互相转化

    在计算机科学中,尤其是编程领域,我们经常需要将字符串和Base64编码进行互相转换。下面我们将详细探讨这个过程: 1. **字符串到Base64的转化**: 当我们需要将一个字符串(通常由ASCII字符组成)编码为Base64时,...

    Delphi MD5+Base64加密与JAVA .NET一样

    在Delphi中实现MD5+Base64加密,可以使用System.Classes单元中的TIdHashMD5类进行MD5哈希计算,然后使用System.NetEncoding单元中的TNetEncoding.Base64类进行Base64编码。以下是一个简单的示例: ```delphi uses ...

    delphi base64算法演示案例

    这里,`TBytes`是Delphi中用于表示字节数组的类型,`EncodeBase64`和`DecodeBase64`是预定义的函数,分别用于Base64编码和解码。复制粘贴这个代码到你的项目中,就可以直接使用Base64功能,无需从头实现算法。 在...

    base64图片转换.rar

    在"base64图片转换.rar"这个压缩包中,很可能包含了一个用Delphi编程语言编写的工具,该工具实现了Base64编码和解码的功能,专门针对图片处理,方便用户在处理图片时将其转化为Base64格式或者将Base64字符串还原为...

    BASE64编码方法

    在Delphi中,` Indy `库提供了方便的函数来进行BASE64的编码和解码。例如,你可以使用` TIdEncoderMIME `类的` Encode `和` Decode `方法: ```delphi uses IdEncoderMIME; var BinaryData: TBytes; Base64...

    Delphi【HMC-SHA签名、SHA加密、MD5加密、URL编码与解码、Base64编码与解码】

    SHA.exe、HMAC.exe、BASE64.exe、URL.exe、MD5.exe这些文件可能是使用Delphi编写的独立可执行程序,分别对应实现了SHA加密、HMAC-SHA签名、Base64编码与解码、URL编码与解码以及MD5加密的功能。

    用Delphi写的从剪切板获取图片Base64String的ActiveX插件

    本话题主要聚焦于一个由Delphi编写的ActiveX插件,其核心功能是从剪切板中提取图片并转换为Base64String编码的字符串,以便更方便地在网络应用中传输和存储。 首先,我们来理解Delphi。Delphi是一款强大的Object ...

Global site tag (gtag.js) - Google Analytics