Delphi 中的MD5實現方法及delphi2009和delphi2010中以上用法

在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;


copy函數:

舉個例子:str := “123456”;str1 := Copy(Str,2,3);結果就是 str1 等於 234。Copy有3個參數,第一個是你要處理的字符串,第二個是你要截取的開始位置,第3個是截取位數。當你的第3個參數大於字符長度,那麼效果就是取 開始位置 後的所有字符。str1 := Copy(Str,2,10); 結果就是str1 等於 23456。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章