捐赠 | 广告 | 注册 | 发布 | 上传 | 关于我们    
  粤ICP备10103342号-1 DELPHI盒子 | 盒子文章 | 盒子问答悬赏 | 最新更新 | 盒子检索 | 下载中心 | 高级搜索    
  精品专区 | 繁體中文 | 奖励公告栏 | 直通车账号登陆 | 关闭GOOGLE广告 | 临时留言    
 
广告
评论:Sky_Coin 视频监控系统 1.00
RichardPa 513378 2015/10/29 23:52:11
http://www.antennenneworal.com/index.php/research-papers-writing-service Research papers writing service http://www.gldining.com/scholarship-essay-for-college-students Scholarship essay for college students http://www.antennenneworal.com/index.php/pay-someone-to-do-my-university-work Pay someone to do my university work http://www.antennenneworal.com/index.php/first-sentence-of-an-essay First sentence of an essay http://www.churchconvention.de/cc/?p=i-will-do-my-homework I will do my homework http://wpsymposium.com/thesis-format-sample Thesis format sample http://www.empowerme.tv/bipolar-disorder-research-paper Bipolar disorder research paper http://www.empowerme.tv/small-essay Small essay http://www.antennenneworal.com/index.php/essay-vato Essay vato http://www.churchconvention.de/cc/?p=how-to-do-a-assignment How to do a assignment http://www.churchconvention.de/cc/?p=on-writing-the-college-application-essay-pdf On writing the college application essay pdf http://www.antennenneworal.com/index.php/i-need-an-argumentative-essay-on-gun-controls I need an argumentative essay on gun controls http://www.gldining.com/can-you-write-an-essay-in-one-day Can you write an essay in one day http://www.churchconvention.de/cc/?p=cheap-dissertation-writing-services-uk Cheap dissertation writing services uk http://www.churchconvention.de/cc/?p=homeworkhelper.org Homeworkhelper.org http://www.empowerme.tv/space-race-essay Space race essay http://www.gldining.com/explanatory-essays Explanatory essays http://www.antennenneworal.com/index.php/legit-essay-writing-company-for-students Legit essay writing company for students http://www.antennenneworal.com/index.php/expository-essay-on-decision-making Expository essay on decision making http://www.antennenneworal.com/index.php/pay-someone-to-do-my-essay Pay someone to do my essay http://www.gldining.com/immigration-argumentative-essay Immigration argumentative essay
hb_35 315314 2015/2/10 21:20:01
HKVideoWindow.Selected说是只读属性,不能赋值,如何解决?
fff2001 42706 2012/9/2 23:22:04
想不到12年了 还有人用呢
zhongyisy 42064 2012/1/12 17:30:23
谁能提供一个可用的呀。。。我谢谢了。。无法初始化DSPS啊。。。我的邮箱是:zhongyisy@163.com  非常感谢。。
afeige76 39742 2010/3/22 14:14:33
大哥,安装THKVideoWindow组件总提示,模块错误:REQUIRES项错误,到底哪出问题了,急死了,麻烦你能不能把你的程序打个包再发一遍啊,或是发到我邮箱里啊,我的邮箱afeige76@126.com!!!先谢谢了
ankey2008 39001 2009/11/7 17:19:23
不好意思,我可能没有卸载干净,现在可以了!

大家不要去这个地方下载了!这个有些属性会缺失!
THKVideoWindow组件大家到http://www.2ccc.com/article.asp?articleid=3735下载!

谢谢laihongbo 大哥的分享!
ankey2008 39000 2009/11/7 16:59:35
大哥,你做事也做全一点啊,组件有问题啊,你三个版本我都试了不行啊,你能不能把你的程序打个包再发一遍啊,或是发到我邮箱里啊,我的邮箱ankey2006@163.com!!!先谢谢了
easy66 38746 2009/10/2 18:03:28
4004HC,无法初始化DSPS
lpj301 37285 2009/4/21 11:16:38
谢谢楼主!!好人赞一个!!!!
461103927 37230 2009/4/15 13:01:24
为什么说无法初始化DSPS?谢谢!
jjkmmjjkmm 36490 2008/12/29 11:40:10
楼主有没做过sdk2000卡采集图像啊,我刚做这个不知道怎么搞,提供点思路啊。
wwx330 36210 2008/11/21 20:09:57
楼主用的肯定不是海康卡哦。
 SDK文件完全不一样嘛
不过还是谢谢楼主给出的程序
hansxia 36148 2008/11/12 16:52:13
SkyPlayer是没有源码的,其他的确实存在
laihongbo 35922 2008/10/26 21:56:18
回楼上的
我的采集卡是4004CS,牌子就不记得了。

监控用的摄像头,直连到采集卡上就可以的了
zwn 35872 2008/10/23 14:07:28
楼主,你的采集卡是啥牌子,和啥型号嘛!怎么连接那些探头设备呢
foryou520 35821 2008/10/18 21:29:51
hc4004的怎么不支持呀?如何才可以用呀?谢谢了
jlbios 35783 2008/10/16 14:42:57
怎么下载不了啊~~~
gxz 35665 2008/10/9 8:59:05
再次打包上传一下不就好了。。。哈哈!谢谢楼主共享!!
laihongbo 35658 2008/10/8 17:24:01
hash.pas
其实就是SHA1的,可以用MD5的替换,用处是效验通道是否停用的
再次补上。。。第一次打包发布时(文件都齐全的),居然站长说我没源码
只好再重新发布,没想这第二次倒忘了那些文件。郁闷

Unit Hash;

Interface

Uses Windows, SysUtils, Classes, Math;

{SHA1**********}
Type
  TSHA1Digest = Array[0..19] Of Byte;   { 160 bits - SHA-1 }
  TSHA1Context = Record          { SHA-1 }
    sdHi: DWord;
    sdLo: DWord;
    sdIndex: DWord;
    sdHash: Array[0..4] Of DWord;
    sdBuf: Array[0..63] Of Byte;
  End;

Procedure SHA1Init(Var Context: TSHA1Context);
Procedure SHA1Update(Var Context: TSHA1Context; Const Buf; BufSize: Longint);
Procedure SHA1Final(Var Context: TSHA1Context; Var Digest: TSHA1Digest);

Procedure HashSHA1(Var Digest: TSHA1Digest; Const Buf; BufSize: Longint);
Function SHA1String(Const Str: String): TSHA1Digest;
Function SHA1Buffer(Const Buf; BufSize: Cardinal): TSHA1Digest;
Function SHA1Stream(Stream: TStream): TSHA1Digest;
Function SHA1File(Const FileName: String): TSHA1Digest;

Function SHA1Print(Digest: TSHA1Digest): String;
Function SHA1Match(D1, D2: TSHA1Digest): Boolean;
{MD5**********}
Type
  TMD5Digest = Array[0..15] Of Byte;    { 128 bits - MD5 }
  TMD5Context = Array[0..87] Of Byte;   { MD5 }

  TMD5ContextEx = Packed Record
    Count: Array[0..1] Of DWord;        {number of bits handled mod 2^64}
    State: Array[0..3] Of DWord;        {scratch buffer}
    Buf: Array[0..63] Of Byte;          {input buffer}
  End;

Procedure MD5Init(Var Context: TMD5Context);
Procedure MD5Update(Var Context: TMD5Context; Const Buf; BufSize: Longint);
Procedure MD5Final(Var Context: TMD5Context; Var Digest: TMD5Digest);

Procedure HashMD5(Var Digest: TMD5Digest; Const Buf; BufSize: Longint);
Function MD5String(Const Str: String): TMD5Digest;
Function MD5Buffer(Const Buf; BufSize: Cardinal): TMD5Digest;
Function MD5Stream(Stream: TStream): TMD5Digest;
Function MD5File(Const FileName: String): TMD5Digest;

Function MD5Print(Digest: TMD5Digest): String;
Function MD5Match(D1, D2: TMD5Digest): Boolean;

Function BufferToHex(Const Buf; BufSize: Cardinal): String;
Function HexToBuffer(Const Hex: String; Var Buf; BufSize: Cardinal): Boolean;
Function CompareBuffers(Const Buf1, Buf2; BufSize: Cardinal): Boolean;
Implementation

{Public}
Function RolX(I, C: DWord): DWord; Register;
Asm
  mov  ecx, edx         {get count to cl}
  rol  eax, cl          {rotate eax by cl}
End;

Function BufferToHex(Const Buf; BufSize: Cardinal): String;
Const
  Digits: Array[0..15] Of Char =
  ('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f');
Var
  I: Longint;
Begin
  Result := '';
  For I := 0 To BufSize - 1 Do
    Result := Result + Digits[(TByteArray(Buf)[I] Shr 4) And $0F] + Digits[TByteArray(Buf)[I] And $0F];
  // Result := Result + IntToHex(TByteArray(Buf)[I], 2);
End;

Function HexToBuffer(Const Hex: String; Var Buf; BufSize: Cardinal): Boolean;
Var
  I, C: Integer;
  Str: String;
  Count: Integer;
Begin
  Result := False;
  Str := '';
  For I := 1 To Length(Hex) Do
    If UpCase(Hex[I]) In ['0'..'9', 'A'..'F'] Then
      Str := Str + Hex[I];

  FillChar(Buf, BufSize, #0);
  Count := Min(Length(Hex), BufSize);

  For I := 0 To Count - 1 Do
  Begin
    Val('$' + Copy(Str, (I Shl 1) + 1, 2), TByteArray(Buf)[I], C); {!!.01}
    If (C <> 0) Then
      Exit;
  End;

  Result := True;
End;

Function CompareBuffers(Const Buf1, Buf2; BufSize: Cardinal): Boolean;
Var
  I: Integer;
Begin
  Result := False;
  For I := 0 To Pred(BufSize) Do
  Begin
    Result := TByteArray(Buf1)[I] = TByteArray(Buf2)[I];
    If Not Result Then
      Break;
  End;
End;

{SHA1}
Const
  SHA1_A = DWord($67452301);
  SHA1_B = DWord($EFCDAB89);
  SHA1_C = DWord($98BADCFE);
  SHA1_D = DWord($10325476);
  SHA1_E = DWord($C3D2E1F0);

  SHA1_K1 = DWord($5A827999);
  SHA1_K2 = DWord($6ED9EBA1);
  SHA1_K3 = DWord($8F1BBCDC);
  SHA1_K4 = DWord($CA62C1D6);

  LBMASK_HI = DWord($FF0000);
  LBMASK_LO = DWord($FF00);

Function SHA1SwapByteOrder(n: DWord): DWord;
Begin
  n := (n Shr 24) Or ((n Shr 8) And LBMASK_LO)
    Or ((n Shl 8) And LBMASK_HI) Or (n Shl 24);
  Result := n;
End;

Procedure SHA1Hash(Var Context: TSHA1Context);
Var
  A: DWord;
  B: DWord;
  C: DWord;
  D: DWord;
  E: DWord;

  X: DWord;
  W: Array[0..79] Of DWord;

  I: Longint;
Begin
  With Context Do
  Begin
    sdIndex := 0;
    Move(sdBuf, W, SizeOf(W));

    For I := 0 To 15 Do
      W[I] := SHA1SwapByteOrder(W[I]);

    For I := 16 To 79 Do
      W[I] := RolX(W[I - 3] Xor W[I - 8] Xor W[I - 14] Xor W[I - 16], 1);

    A := sdHash[0];
    B := sdHash[1];
    C := sdHash[2];
    D := sdHash[3];
    E := sdHash[4];

    For I := 0 To 19 Do
    Begin
      X := RolX(A, 5) + (D Xor (B And (C Xor D))) + E + W[I] + SHA1_K1;
      E := D;
      D := C;
      C := RolX(B, 30);
      B := A;
      A := X;
    End;

    For I := 20 To 39 Do
    Begin
      X := RolX(A, 5) + (B Xor C Xor D) + E + W[I] + SHA1_K2;
      E := D;
      D := C;
      C := RolX(B, 30);
      B := A;
      A := X;
    End;

    For I := 40 To 59 Do
    Begin
      X := RolX(A, 5) + ((B And C) Or (D And (B Or C))) + E + W[I] + SHA1_K3;
      E := D;
      D := C;
      C := RolX(B, 30);
      B := A;
      A := X;
    End;

    For I := 60 To 79 Do
    Begin
      X := RolX(A, 5) + (B Xor C Xor D) + E + W[I] + SHA1_K4;
      E := D;
      D := C;
      C := RolX(B, 30);
      B := A;
      A := X;
    End;

    sdHash[0] := sdHash[0] + A;
    sdHash[1] := sdHash[1] + B;
    sdHash[2] := sdHash[2] + C;
    sdHash[3] := sdHash[3] + D;
    sdHash[4] := sdHash[4] + E;

    FillChar(W, SizeOf(W), $00);
    FillChar(sdBuf, SizeOf(sdBuf), $00);
  End;
End;

Procedure SHA1Clear(Var Context: TSHA1Context);
Begin
  FillChar(Context, SizeOf(Context), $00);
End;

Procedure SHA1UpdateLen(Var Context: TSHA1Context; Len: DWord);
Begin
  Inc(Context.sdLo, (Len Shl 3));
  If Context.sdLo < (Len Shl 3) Then
    Inc(Context.sdHi);
  Inc(Context.sdHi, Len Shr 29);
End;

Procedure SHA1Init(Var Context: TSHA1Context);
Begin
  SHA1Clear(Context);
  Context.sdHash[0] := SHA1_A;
  Context.sdHash[1] := SHA1_B;
  Context.sdHash[2] := SHA1_C;
  Context.sdHash[3] := SHA1_D;
  Context.sdHash[4] := SHA1_E;
End;

Procedure SHA1Update(Var Context: TSHA1Context; Const Buf; BufSize: Longint);
Var
  PBuf: ^Byte;
Begin
  With Context Do
  Begin
    SHA1UpdateLen(Context, BufSize);
    PBuf := @Buf;
    While BufSize > 0 Do
    Begin
      If (SizeOf(sdBuf) - sdIndex) <= DWord(BufSize) Then
      Begin
        Move(PBuf^, sdBuf[sdIndex], SizeOf(sdBuf) - sdIndex);
        Dec(BufSize, SizeOf(sdBuf) - sdIndex);
        Inc(PBuf, SizeOf(sdBuf) - sdIndex);
        SHA1Hash(Context);
      End Else
      Begin
        Move(PBuf^, sdBuf[sdIndex], BufSize);
        Inc(sdIndex, BufSize);
        BufSize := 0;
      End;
    End;
  End;
End;

Procedure SHA1Final(Var Context: TSHA1Context; Var Digest: TSHA1Digest);
Begin
  With Context Do
  Begin
    sdBuf[sdIndex] := $80;

    If sdIndex >= 56 Then
      SHA1Hash(Context);

    PDWord(@sdBuf[56])^ := SHA1SwapByteOrder(sdHi);
    PDWord(@sdBuf[60])^ := SHA1SwapByteOrder(sdLo);

    SHA1Hash(Context);

    sdHash[0] := SHA1SwapByteOrder(sdHash[0]);
    sdHash[1] := SHA1SwapByteOrder(sdHash[1]);
    sdHash[2] := SHA1SwapByteOrder(sdHash[2]);
    sdHash[3] := SHA1SwapByteOrder(sdHash[3]);
    sdHash[4] := SHA1SwapByteOrder(sdHash[4]);

    Move(sdHash, Digest, SizeOf(Digest));
    SHA1Clear(Context);
  End;
End;

Procedure HashSHA1(Var Digest: TSHA1Digest; Const Buf; BufSize: Longint);
Var
  Context: TSHA1Context;
Begin
  SHA1Init(Context);
  SHA1Update(Context, Buf, BufSize);
  SHA1Final(Context, Digest);
End;

Function SHA1String(Const Str: String): TSHA1Digest;
Begin
  HashSHA1(Result, Str[1], Length(Str));
End;

Function SHA1Buffer(Const Buf; BufSize: Cardinal): TSHA1Digest;
Begin
  HashSHA1(Result, Buf, BufSize);
End;

Function SHA1Stream(Stream: TStream): TSHA1Digest;
Var
  Context: TSHA1Context;
  BufSize: Integer;
  FBuf: Array[0..4096 - 1] Of Byte;
Begin
  Stream.Position := 0;
  SHA1Init(Context);
  BufSize := Stream.Read(FBuf, SizeOf(FBuf));
  While (BufSize > 0) Do
  Begin
    SHA1Update(Context, FBuf, BufSize);
    BufSize := Stream.Read(FBuf, SizeOf(FBuf));
  End;
  SHA1Final(Context, Result);
End;

Function SHA1File(Const FileName: String): TSHA1Digest;
Var
  FS: TFileStream;
Begin
  FS := TFileStream.Create(FileName, fmOpenRead Or fmShareDenyNone);
  Try
    Result := SHA1Stream(FS);
  Finally
    FS.Free;
  End;
End;

Function SHA1Print(Digest: TSHA1Digest): String;
Begin
  Result := BufferToHex(Digest, SizeOf(Digest));
End;

Function SHA1Match(D1, D2: TSHA1Digest): Boolean;
Begin
  Result := CompareBuffers(D1, D2, SizeOf(D1));
End;

{MD5}
Procedure MD5Transform(Var Buffer: Array Of DWord; Const InBuf: Array Of DWord);
Const
  S11 = 7;
  S12 = 12;
  S13 = 17;
  S14 = 22;
  S21 = 5;
  S22 = 9;
  S23 = 14;
  S24 = 20;
  S31 = 4;
  S32 = 11;
  S33 = 16;
  S34 = 23;
  S41 = 6;
  S42 = 10;
  S43 = 15;
  S44 = 21;
Var
  Buf: Array[0..3] Of DWord;
  InA: Array[0..15] Of DWord;
Var
  A: DWord;
  B: DWord;
  C: DWord;
  D: DWord;

  Procedure FF(Var A: DWord; B, C, D, X, S, AC: DWord);
  Begin
    A := RolX(A + ((B And C) Or (Not B And D)) + X + AC, S) + B;
  End;

  Procedure GG(Var A: DWord; B, C, D, X, S, AC: DWord);
  Begin
    A := RolX(A + ((B And D) Or (C And Not D)) + X + AC, S) + B;
  End;

  Procedure HH(Var A: DWord; B, C, D, X, S, AC: DWord);
  Begin
    A := RolX(A + (B Xor C Xor D) + X + AC, S) + B;
  End;

  Procedure II(Var A: DWord; B, C, D, X, S, AC: DWord);
  Begin
    A := RolX(A + (C Xor (B Or Not D)) + X + AC, S) + B;
  End;

Begin
  Move(Buffer, Buf, SizeOf(Buf));       {!!.01}
  Move(InBuf, InA, SizeOf(InA));        {!!.01}
  A := Buf[0];
  B := Buf[1];
  C := Buf[2];
  D := Buf[3];

  {round 1}
  FF(A, B, C, D, InA[0], S11, $D76AA478); { 1 }
  FF(D, A, B, C, InA[1], S12, $E8C7B756); { 2 }
  FF(C, D, A, B, InA[2], S13, $242070DB); { 3 }
  FF(B, C, D, A, InA[3], S14, $C1BDCEEE); { 4 }
  FF(A, B, C, D, InA[4], S11, $F57C0FAF); { 5 }
  FF(D, A, B, C, InA[5], S12, $4787C62A); { 6 }
  FF(C, D, A, B, InA[6], S13, $A8304613); { 7 }
  FF(B, C, D, A, InA[7], S14, $FD469501); { 8 }
  FF(A, B, C, D, InA[8], S11, $698098D8); { 9 }
  FF(D, A, B, C, InA[9], S12, $8B44F7AF); { 10 }
  FF(C, D, A, B, InA[10], S13, $FFFF5BB1); { 11 }
  FF(B, C, D, A, InA[11], S14, $895CD7BE); { 12 }
  FF(A, B, C, D, InA[12], S11, $6B901122); { 13 }
  FF(D, A, B, C, InA[13], S12, $FD987193); { 14 }
  FF(C, D, A, B, InA[14], S13, $A679438E); { 15 }
  FF(B, C, D, A, InA[15], S14, $49B40821); { 16 }

  {round 2}
  GG(A, B, C, D, InA[1], S21, $F61E2562); { 17 }
  GG(D, A, B, C, InA[6], S22, $C040B340); { 18 }
  GG(C, D, A, B, InA[11], S23, $265E5A51); { 19 }
  GG(B, C, D, A, InA[0], S24, $E9B6C7AA); { 20 }
  GG(A, B, C, D, InA[5], S21, $D62F105D); { 21 }
  GG(D, A, B, C, InA[10], S22, $02441453); { 22 }
  GG(C, D, A, B, InA[15], S23, $D8A1E681); { 23 }
  GG(B, C, D, A, InA[4], S24, $E7D3FBC8); { 24 }
  GG(A, B, C, D, InA[9], S21, $21E1CDE6); { 25 }
  GG(D, A, B, C, InA[14], S22, $C33707D6); { 26 }
  GG(C, D, A, B, InA[3], S23, $F4D50D87); { 27 }
  GG(B, C, D, A, InA[8], S24, $455A14ED); { 28 }
  GG(A, B, C, D, InA[13], S21, $A9E3E905); { 29 }
  GG(D, A, B, C, InA[2], S22, $FCEFA3F8); { 30 }
  GG(C, D, A, B, InA[7], S23, $676F02D9); { 31 }
  GG(B, C, D, A, InA[12], S24, $8D2A4C8A); { 32 }

  {round 3}
  HH(A, B, C, D, InA[5], S31, $FFFA3942); { 33 }
  HH(D, A, B, C, InA[8], S32, $8771F681); { 34 }
  HH(C, D, A, B, InA[11], S33, $6D9D6122); { 35 }
  HH(B, C, D, A, InA[14], S34, $FDE5380C); { 36 }
  HH(A, B, C, D, InA[1], S31, $A4BEEA44); { 37 }
  HH(D, A, B, C, InA[4], S32, $4BDECFA9); { 38 }
  HH(C, D, A, B, InA[7], S33, $F6BB4B60); { 39 }
  HH(B, C, D, A, InA[10], S34, $BEBFBC70); { 40 }
  HH(A, B, C, D, InA[13], S31, $289B7EC6); { 41 }
  HH(D, A, B, C, InA[0], S32, $EAA127FA); { 42 }
  HH(C, D, A, B, InA[3], S33, $D4EF3085); { 43 }
  HH(B, C, D, A, InA[6], S34, $4881D05); { 44 }
  HH(A, B, C, D, InA[9], S31, $D9D4D039); { 45 }
  HH(D, A, B, C, InA[12], S32, $E6DB99E5); { 46 }
  HH(C, D, A, B, InA[15], S33, $1FA27CF8); { 47 }
  HH(B, C, D, A, InA[2], S34, $C4AC5665); { 48 }

  {round 4}
  II(A, B, C, D, InA[0], S41, $F4292244); { 49 }
  II(D, A, B, C, InA[7], S42, $432AFF97); { 50 }
  II(C, D, A, B, InA[14], S43, $AB9423A7); { 51 }
  II(B, C, D, A, InA[5], S44, $FC93A039); { 52 }
  II(A, B, C, D, InA[12], S41, $655B59C3); { 53 }
  II(D, A, B, C, InA[3], S42, $8F0CCC92); { 54 }
  II(C, D, A, B, InA[10], S43, $FFEFF47D); { 55 }
  II(B, C, D, A, InA[1], S44, $85845DD1); { 56 }
  II(A, B, C, D, InA[8], S41, $6FA87E4F); { 57 }
  II(D, A, B, C, InA[15], S42, $FE2CE6E0); { 58 }
  II(C, D, A, B, InA[6], S43, $A3014314); { 59 }
  II(B, C, D, A, InA[13], S44, $4E0811A1); { 60 }
  II(A, B, C, D, InA[4], S41, $F7537E82); { 61 }
  II(D, A, B, C, InA[11], S42, $BD3AF235); { 62 }
  II(C, D, A, B, InA[2], S43, $2AD7D2BB); { 63 }
  II(B, C, D, A, InA[9], S44, $EB86D391); { 64 }

  Inc(Buf[0], A);
  Inc(Buf[1], B);
  Inc(Buf[2], C);
  Inc(Buf[3], D);

  Move(Buf, Buffer, SizeOf(Buffer));
End;

Procedure MD5Init(Var Context: TMD5Context);
Var
  MD5: TMD5ContextEx;
Begin
  Move(Context, MD5, SizeOf(MD5));
  MD5.Count[0] := 0;
  MD5.Count[1] := 0;

  MD5.State[0] := $67452301;
  MD5.State[1] := $EFCDAB89;
  MD5.State[2] := $98BADCFE;
  MD5.State[3] := $10325476;
  Move(MD5, Context, SizeOf(Context));
End;

Procedure MD5Update(Var Context: TMD5Context; Const Buf; BufSize: Longint);
Var
  MD5: TMD5ContextEx;
  InBuf: Array[0..15] Of DWord;
  BufOfs: Longint;
  MDI: Word;
  I: Word;
  II: Word;
Begin
  Move(Context, MD5, SizeOf(MD5));

  MDI := (MD5.Count[0] Shr 3) And $3F;

  If ((MD5.Count[0] + (DWord(BufSize) Shl 3)) < MD5.Count[0]) Then
    Inc(MD5.Count[1]);
  Inc(MD5.Count[0], BufSize Shl 3);
  Inc(MD5.Count[1], BufSize Shr 29);

  BufOfs := 0;
  While (BufSize > 0) Do
  Begin
    Dec(BufSize);
    MD5.Buf[MDI] := TByteArray(Buf)[BufOfs]; {!!.01}
    Inc(MDI);
    Inc(BufOfs);
    If (MDI = $40) Then
    Begin
      II := 0;
      For I := 0 To 15 Do
      Begin
        InBuf[I] := Longint(MD5.Buf[II + 3]) Shl 24 Or
          Longint(MD5.Buf[II + 2]) Shl 16 Or
          Longint(MD5.Buf[II + 1]) Shl 8 Or
          Longint(MD5.Buf[II]);
        Inc(II, 4);
      End;
      MD5Transform(MD5.State, InBuf);
      MD5Transform(TMD5ContextEx(Context).State, InBuf);
      MDI := 0;
    End;
  End;
  Move(MD5, Context, SizeOf(Context));  {!!.01}
End;

Procedure MD5Final(Var Context: TMD5Context; Var Digest: TMD5Digest);
Const
  Padding: Array[0..63] Of Byte = (
    $80, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00);
Var
  MD5: TMD5ContextEx;
  InBuf: Array[0..15] Of DWord;
  MDI: Longint;
  I: Word;
  II: Word;
  PadLen: Word;
Begin
  Move(Context, MD5, SizeOf(MD5));

  InBuf[14] := MD5.Count[0];
  InBuf[15] := MD5.Count[1];

  MDI := (MD5.Count[0] Shr 3) And $3F;

  If (MDI < 56) Then
    PadLen := 56 - MDI
  Else
    PadLen := 120 - MDI;
  MD5Update(Context, Padding, PadLen);

  Move(Context, MD5, SizeOf(MD5));

  II := 0;
  For I := 0 To 13 Do
  Begin
    InBuf[I] :=
      (Longint(MD5.Buf[II + 3]) Shl 24) Or
      (Longint(MD5.Buf[II + 2]) Shl 16) Or
      (Longint(MD5.Buf[II + 1]) Shl 8) Or
      Longint(MD5.Buf[II]);
    Inc(II, 4);
  End;
  MD5Transform(MD5.State, InBuf);
  II := 0;
  For I := 0 To 3 Do
  Begin
    Digest[II] := Byte(MD5.State[I] And $FF);
    Digest[II + 1] := Byte((MD5.State[I] Shr 8) And $FF);
    Digest[II + 2] := Byte((MD5.State[I] Shr 16) And $FF);
    Digest[II + 3] := Byte((MD5.State[I] Shr 24) And $FF);
    Inc(II, 4);
  End;
  Move(MD5, Context, SizeOf(Context));
End;

Procedure HashMD5(Var Digest: TMD5Digest; Const Buf; BufSize: Longint);
Var
  Context: TMD5Context;
Begin
  FillChar(Context, SizeOf(Context), $00);
  MD5Init(Context);
  MD5Update(Context, Buf, BufSize);
  MD5Final(Context, Digest);
End;

Function MD5String(Const Str: String): TMD5Digest;
Begin
  HashMD5(Result, Str[1], Length(Str));
End;

Function MD5Buffer(Const Buf; BufSize: Cardinal): TMD5Digest;
Begin
  HashMD5(Result, Buf, BufSize);
End;

Function MD5Stream(Stream: TStream): TMD5Digest;
Var
  Context: TMD5Context;
  BufSize: Integer;
  FBuf: Array[0..4096 - 1] Of Byte;
Begin
  MD5Init(Context);
  BufSize := Stream.Read(FBuf, SizeOf(FBuf));
  While (BufSize > 0) Do
  Begin
    MD5Update(Context, FBuf, BufSize);
    BufSize := Stream.Read(FBuf, SizeOf(FBuf));
  End;
  MD5Final(Context, Result);
End;

Function MD5File(Const FileName: String): TMD5Digest;
Var
  FS: TFileStream;
Begin
  FS := TFileStream.Create(FileName, fmOpenRead Or fmShareDenyNone);
  Try
    Result := MD5Stream(FS);
  Finally
    FS.Free;
  End;
End;

Function MD5Print(Digest: TMD5Digest): String;
Begin
  Result := BufferToHex(Digest, SizeOf(Digest));
End;

Function MD5Match(D1, D2: TMD5Digest): Boolean;
Begin
  Result := CompareBuffers(D1, D2, SizeOf(D1));
End;
End.
shuihan20e 35657 2008/10/8 16:13:15
没有hash.pas啊
第一页 上一页 下一页 最后页 有 28 条纪录 共2页 1 - 20
 用户名:
 密 码:
自动登陆(30天有效)
 
  DELPHI盒子版权所有 技术支持:深圳市麟瑞科技有限公司 1999-2024 V4.01 粤ICP备10103342号-1 更新RSS列表