实际上这种办法是有缺陷的,但是需要的就是这个缺陷(没有办法) 今天我有提过md5.asp因为设计上的缺陷,在对双字节字符(比方说中文)进行加密的时候会和标准的md5算法(.Net /IndyHashMessageDigest5 / md5.pas,这三者计算结果相同,同为以字节为单位计算岀的结果)结果有出入。 其原因在于md5.asp使用mid函数,取出的是“字符”,而正确的做法应该是取出字节,可是论坛数据库(比方说dvbbs7)中的数据已经是md5.asp的加密结果,所以我们只能将错就错,为我们的程序重写一个和md5.asp一样的加密过程 >>>> 被广泛使用的MD5.asp中似乎存在缺陷 我今天总算是用Delphi写出来了 虽然不知道asc函数得到的结果是否正确代码——我的目标是和md5.asp结果一样,现在缺的不就是这个有缺陷的程序吗?
| unit AMD5; interface //////////////////////////////////////////// // 文件名 : AMD5.pas // // 功能 : 与md5.asp计算结果相同 // // 作者 : 由ScriptBaby改编自md5.asp // // 完成时间: 2004-07-21 // //////////////////////////////////////////// //请转载者保留以上信息,谢谢// uses SysUtils; type arrlongword = array of longword; type sMD5 = class class function RotateLeft(const lValue, Bits: longword): longword; class function MD5(const sMessage: string; const sType: boolean = false): string; class function ConvToWord(const sMessage: string): arrlongword; overload; class function ConvToWord(const sMessage: WideString): arrlongword; overload; class function WordToHex(const lValue: longword): string; end; implementation |
|