加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Delphi6-xe5 中的MD5实现方法

发布时间:2020-12-15 10:03:34 所属栏目:大数据 来源:网络整理
导读:在Delphi自带的Indy控件中其实是提供了MD2,MD4,MD5对象的,我们可以直接使用它们来完成MD5的签名算法。而不需要再去找其它的DLL或是Pas了。 在Uses单元中引用 IdHashMessageDigest,IdGlobal,IdHash 单元,再写如下代码即可以达到MD5的实现。 示例代码 proced
在Delphi自带的Indy控件中其实是提供了MD2,MD4,MD5对象的,我们可以直接使用它们来完成MD5的签名算法。而不需要再去找其它的DLL或是Pas了。
在Uses单元中引用 IdHashMessageDigest,IdGlobal,IdHash 单元,再写如下代码即可以达到MD5的实现。

示例代码

procedure TForm1.Button1Click(Sender: TObject);
var
 MyMD5: TIdHashMessageDigest5;
 Digest: T4x4LongWordRecord;
begin
 MyMD5 := TIdHashMessageDigest5.Create;
 Digest := MyMD5.HashValue('');
 ShowMessage('32: ' + MyMD5.AsHex(Digest));  //显示32个字符长度的MD5签名结果
 ShowMessage('16: ' + Copy(MyMD5.AsHex(Digest),9,16));   //显示16个字符长度的MD5签名结果
end;


说明:
? MyMD5.HashValue 函数中可以是一个字符串或是一个流对象,它返回的结果类型为 T4x4LongWordRecord 的MD5签名后结果

? MyMD5.AsHex ?函数是将T4x4LongWordRecord的Md5签名转换成为十六进制的MD5签名字符串。




在Delphi自带的Indy控件中其实是提供了MD2,MD5对象的,我们可以直接使用它们来完成MD5的签名算法。而不需要再去找其它的DLL或是Pas了。 
在Uses单元中引用 IdHashMessageDigest,IdHash 单元,再写如下代码即可以达到MD5的实现。 
示例代码 
procedure TForm1.Button1Click(Sender: TObject); 
var 
MyMD5: TIdHashMessageDigest5; 
Digest: T4x4LongWordRecord; 
begin 
MyMD5 := TIdHashMessageDigest5.Create; 
Digest := MyMD5.HashValue(''); 
ShowMessage('32: ' + MyMD5.AsHex(Digest)); //显示32个字符长度的MD5签名结果 
ShowMessage(16: ' + Copy(MyMD5.AsHex(Digest),9,128)">16));   //显示16个字符长度的MD5签名结果 
end; 
说明: 
MyMD5.HashValue 函数中可以是一个字符串或是一个流对象,它返回的结果类型为 T4x4LongWordRecord 的MD5签名后结果 
MyMD5.AsHex 函数是将T4x4LongWordRecord的Md5签名转换成为十六进制的MD5签名字符串。

-----------------------------------------以上的方法适合Indy9---------------------------------------------

以下为Indy10的用法用delphi2009或delphi2010时以上就会报错了.

type
TMD5 = class(TIdHashMessageDigest5);

function StrToMD5(S: String): String; overload;
function StrToMD5(S: String; L: integer): String; overload;

implementation

function StrToMD5(S: String): String;
var
Md5Encode: TMD5;
begin
Md5Encode:= TMD5.Create;
try
    //Result := Md5Encode.AsHex(Md5Encode.HashValue(S)); // Indy9的写法
    Result := Md5Encode.HashStringAsHex(S);    // Indy10中可以直接HashStringAsHex
finally
    Md5Encode.Free;
end;
end;

function StrToMD5(S: String; L: integer): String;
begin
Result := Copy(StrToMD5(S),128)">5,L);
end;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读