• Delphi 中的MD5实现方法(转)


    在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签名字符串。

    -----------------------------------------以上的方法适合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), 5, L);
    end;

    (From: http://www.delphitop.com/html/jiami/1775.html)
  • 相关阅读:
    Openjudge NOI题库 ch0111/01 查找最近的元素
    Openjudge NOI题库 ch0111/07 和为给定数
    Openjudge NOI题库 ch0111/08 不重复地输出数
    Openjudge NOI题库 ch0111/10 河中跳房子|NOIP2015 day2 stone
    Openjudge NOI题库 ch0111/t1776 木材加工
    SRM 508(2-1000pt)
    SRM 507(2-1000pt)
    SRM 504.5(2-1000pt)
    最小生成树专题总结
    SRM 506(2-1000pt)
  • 原文地址:https://www.cnblogs.com/JayK/p/3230510.html
Copyright © 2020-2023  润新知