和md5.asp结果一样的Delphi加密代码

2016-01-29 14:04 50 1 收藏

和md5.asp结果一样的Delphi加密代码,和md5.asp结果一样的Delphi加密代码

【 tulaoshi.com - Delphi 】

 
实际上这种办法是有缺陷的,但是需要的就是这个缺陷(没有办法)

  今天我有提过md5.asp因为设计上的缺陷,在对双字节字符(比方说中文)进行加密的时候会和标准的md5算法(.Net /IndyHashMessageDigest5 / md5.pas,这三者计算结果相同,同为以字节为单位计算岀的结果)结果有出入。

  其原因在于md5.asp使用mid函数,取出的是“字符”,而正确的做法应该是取出字节,可是论坛数据库(比方说dvbbs7)中的数据已经是md5.asp的加密结果,所以我们只能将错就错,为我们的程序重写一个和md5.asp一样的加密过程
  被广泛使用的MD5.asp中似乎存在缺陷

  我今天总算是用Delphi写出来了
虽然不知道asc函数得到的结果是否正确代码——我的目标是和md5.asp结果一样,现在缺的不就是这个有缺陷的程序吗?

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/delphi/)


unit AMD5;

interface

        ////////////////////////////////////////////
        //  文件名 : AMD5.pas                     //
        //   功能  : 与md5.asp计算结果相同        //
        //   作者  : 由ScriptBaby改编自md5.asp    //
        // 完成时间: 2004-07-21                   //
        ////////////////////////////////////////////

              //请转载者保留以上信息,谢谢//

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/delphi/)

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

 



const
  BITS_TO_A_BYTE = 8;
  BYTES_TO_A_WORD = 4;
  BITS_TO_A_WORD = 32;

  cAA = $67452301;
  cBB = $EFCDAB89;
  cCC = $98BADCFE;
  cDD = $10325476;

  MODULUS_BITS = 512;
  CONGRUENT_BITS = 448;

{ sMD5 }

class function sMD5.ConvToWord(const sMessage: WideString): arrlongword;
var
  lMessageLength,      
  lNumberOfWords,      
  lBytePosition,
  lByteCount,          
  lWordCount: longword;
  lWordArray: arrlongword;

  { Function }
  function Asc(const t: WideChar): Smallint;
  var
    s: string;
    a: Smallint;
  begin
     s := t;

     a := Smallint(s[1]);
     case Length(s) of
       2:
       begin
         a := a shl 8;
         a := a + Smallint(s[2]);
       end
     else ;
     end;

     Result := a;
  end;

[pag

来源:https://www.tulaoshi.com/n/20160129/1492434.html

延伸阅读
标签: Web开发
源码 /**  * 类名:      MD5Digestbr  * 说明:   用来进行密码加密的md5公用参数br  * 编写日期:  2001/03/05br  * 修改者:    br  * 修改信息:  br  * @author     edgarlo edgarlo@c...
标签: 黄豆 豆浆
毛豆和黄豆一样吗 毛豆和黄豆其实就是同一种生物,只是像人一样,年轻时被称作年轻人,老了被称为老人,而毛豆就是年轻时期,黄豆就是老年时期。 1、毛豆就是黄豆,是还没有完全成熟的黄豆。且毛豆又叫菜用大豆,日本称它为枝豆,,是大豆作物中专门鲜食嫩荚的蔬菜用大豆。毛豆就是新鲜连荚的黄豆。 2、黄豆和毛豆其实就是一种植物,只不过区...
标签: Web开发
应网友的要求,做了个用MD5加密用户密码的示例,现在示例放上来,高手就不用看了 , 比较简单,就不做说明了,看代码就明白了。数据库在DataBase目录里,附加进去就好了,修改 web.config 里的数据库连接: appSettings   !--数据库连接--   add key="MD5" value="server=jiang;uid=sa;pwd=;database=MD5" / ...
在WTL中使用MD5加密法 作者:广西北流中学160班 聂华闻 下载源代码   不记得在哪个地方得到了一个MD5加密法的类,由于开发的原因要在WTL中使用MD5加密法,但是,这个类并不能直接的用在WTL中(In MFC it was an easy job ),所以我就修改了一下,并写出此文,以方便大家以后在WTL中使用MD...
先看看代码再说: 代码如下: package com.b510.note;  import java.math.BigInteger;  import java.security.MessageDigest;  import java.security.NoSuchAlgorithmException;  /**   * MD5加密   *   * @author Hongten   *   */  public class MD5 {      pub...

经验教程

78

收藏

34
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部