delphi 关于MD5加密 向大神们请教几个问题?

寂小魔 2012-03-28 01:21:47

unit ToMD5;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, IdHashMessageDigest, IdHash, IdGlobal, StdCtrls;

type
TMD5 = class(TForm)
Edit1: TEdit;
Button1: TButton;
Label1: TLabel;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Label2: TLabel;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
function StrToMD5(S: String): String; overload;
function StrToMD516(S: String; L: integer): String; overload; //返加16位MD5值
function StrToMD532(S: String; L: integer): String; overload; //返回32位MD5值
{ Private declarations }
public
{ Public declarations }
end;
var
MD5: TMD5;

implementation

{$R *.dfm}

{ TMD5 }
//执行返回32位MD5值
procedure TMD5.Button1Click(Sender: TObject);
var
s, s1: string;
i: Integer;

begin
s := Edit1.Text;
i := StrToInt(Edit2.Text);
Label1.Caption := StrToMD532(s, i);
//返回MD5值的长度
s1 := Label1.Caption;
Edit4.Text := IntToStr(Length(s1));
end;

//执行返回16位MD5值
procedure TMD5.Button2Click(Sender: TObject);
var
s: string;
i: Integer;
begin
s := Edit3.Text;
i := StrToInt(Edit4.Text);
Label2.Caption := StrToMD516(s, i);
end;

function TMD5.StrToMD5(S: String): String;
var
Md5Encode: TIdHashMessageDigest5;
begin
Md5Encode:= TIdHashMessageDigest5.Create;
try
result:= Md5Encode.HashStringAsHex(s);
finally
Md5Encode.Free;
end;
end;

//返回16位MD5值函数
function TMD5.StrToMD516(S: String; L: Integer): String;
begin
result:= copy(StrToMD5(S), 9, L); //数值 9 是做的什么? L 是做什么?
end;

//返回16位MD5值函数
function TMD5.StrToMD532(S: String; L: Integer): String;
begin
result:= copy(StrToMD5(S), 1, L);
end;

end.

...全文
117 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
寂小魔 2012-03-28
  • 打赏
  • 举报
回复
谢谢两位,现在我对MD5有些了解了。
jonathanscor 2012-03-28
  • 打赏
  • 举报
回复
只是长度的区别而已!
16位加密就是从32位MD5散列中把中间16位提取出来!
就好比破解16位MD5散列不见得比破解32位MD5散列快~
因为他多了一个步骤就是加密后再把中间16位提取出来~ 然后再进行对比
你对比一下32为加密内容和16位的加密内容就知道
123456” md516位和32位加密后
49ba59abbe56e057
e10adc39 49ba59abbe56e057 f20f883e中间是一样的,所以从9开始取

寂小魔 2012-03-28
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

copy(StrToMD5(S), 9, L);//表示从第九位开始截取字段串,截取L位
[/Quote]是不是MD5加密后 的值中 从第9位开始截取字符,然后截取L位?
那这2个值有什么限制?
我看见佛 2012-03-28
  • 打赏
  • 举报
回复
copy(StrToMD5(S), 9, L);//表示从第九位开始截取字段串,截取L位
寂小魔 2012-03-28
  • 打赏
  • 举报
回复
那位大神能给点 注释,让我更清楚的了解下 谢谢

5,392

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧