آخرين پست هاي ارسالي انجمن ايران دلفي

تماشای رایگان فیلم ایرانی ، خارجی و کودک آکادمی دلفی
نمایش نتایج: از 1 به 3 از 3

موضوع: md5 در دلفی

Hybrid View

  1. #1
    مدیرکل سایت admin آواتار ها
    تاریخ عضویت
    September 2008
    محل سکونت
    تهران ، آیسک
    سن
    39
    نوشته ها
    522
    تشکر ها
    247
    تشکر شده 250 بار در 160 ارسال.
    Blog Entries
    1

    md5 در دلفی

    اینم یونیت md5* واسه رمزنگاری هایی مثل پسورد و ...

    کد:

    کد:
    unit md5;
    
    interface
    
    type
     *MD5Digest = array[0..15] of Byte;
     *MD5State = array[0..3] of LongWord;
     *MD5Buffer = array[0..63] of Byte;
    
     *TMD5 = class
     *private
     * *FState: MD5State;
     * *FCount: Int64;
     * *FBuffer: MD5Buffer;
     *public
     * *constructor Create;
     * *procedure Update(const Input; Length: Cardinal);
     * *function Final: MD5Digest;
     *end;
    
     *
    function MD5Message(const Message; Length: Cardinal): MD5Digest;
    function MD5String(const S: string): MD5Digest;
    function MD5File(const FileName: string): MD5Digest;
    
    function MD5Print(const D: MD5Digest): string;
    
    
    implementation
    
    {$IFDEF MSWINDOWS}
    uses
     *Windows;
    {$ENDIF} * * * * * *
    
    
    function ROL(X: LongWord; Count: Integer): LongWord;
    {$IFDEF PUREPASCAL}
    begin
     *Result := (X shl Count) or (X shr (32 - Count));
    end;
    {$ELSE}
    asm
     * * * *MOV * * ECX,EDX
     * * * *ROL * * EAX,CL
    end;
    {$ENDIF}
    
    
    type
     *MD5Iters = 0..63;
    
    var
     *k: array[MD5Iters] of Integer;
     *T: array[MD5Iters] of LongWord;
     *s: array[MD5Iters] of Integer;
    
    procedure InitLUTs;
    const
     *A: array[0..15] of Integer =
     * *(
     * * *7, 12, 17, 22,
     * * *5, *9, 14, 20,
     * * *4, 11, 16, 23,
     * * *6, 10, 15, 21
     * *);
    var
     *I: Integer;
    begin
     *for I := 0 to 63 do
     *begin
     * *case I of
     * * *0..15: k[I] := I;
     * * *16..31: k[I] := (5 * I + 1) and $f;
     * * *32..47: k[I] := (3 * I + 5) and $f;
     * * *48..63: k[I] := (7 * I) and $f;
     * *end;
     * *T[I] := Trunc(Abs(Sin(I + 1)) * $100000000);
     * *s[I] := A[I shr 2 and $c or I and $3];
     *end;
    end;
    
    // MD5 basic transformation. Transforms state based on block.
    
    procedure Transform(var State: MD5State; const Block);
    var
     *X: array[0..15] of LongWord absolute Block;
     *a, b, c, d, i, f, temp: LongWord;
    begin
     *f := 0;
     *a := State[0];
     *b := State[1];
     *c := State[2];
     *d := State[3];
     *for i := 0 to 63 do
     *begin
     * *case i of
     * * *0..15: f := d xor (b and (c xor d));
     * * *16..31: f := c xor (d and (b xor c));
     * * *32..47: f := b xor c xor d;
     * * *48..63: f := c xor (b or (not d));
     * *end;
     * *temp := d;
     * *d := c;
     * *c := b;
     * *Inc(b, ROL(a + f + X[k] + T, s));
     * *a := temp;
     *end;
     *Inc(State[0], a);
     *Inc(State[1], b);
     *Inc(State[2], c);
     *Inc(State[3], d);
    end;
    
    
    { TMD5 }
    
    constructor TMD5.Create;
    begin
     *FState[0] := $67452301;
     *FState[1] := $efcdab89;
     *FState[2] := $98badcfe;
     *FState[3] := $10325476;
    end;
    
    type
     *Bytes = array[0..0] of Byte;
    
    procedure TMD5.Update(const Input; Length: Cardinal);
    var
     *I, Index, PartLen: Cardinal;
    begin
     *Index := FCount and $3f;
     *Inc(FCount, Length);
     *PartLen := 64 - Index;
     *if Length >= PartLen then
     *begin
     * *Move(Input, FBuffer[Index], PartLen);
     * *Transform(FState, FBuffer);
     * *I := PartLen;
     * *while I + 63 < Length do
     * *begin
     * * *Transform(FState, Bytes(Input)[I]);
     * * *Inc(I, 64);
     * *end;
     * *Index := 0;
     *end
     *else
     * *I := 0;
     *Move(Bytes(Input)[I], FBuffer[Index], Length - I);
    end;
    
    function TMD5.Final: MD5Digest;
    var
     *BitLength: Int64;
     *Padding: MD5Buffer;
     *PadLen: Integer;
    begin
     *BitLength := FCount shl 3;
     *PadLen := (119 - FCount and $3f) and $3f + 1;
     *FillChar(Padding, PadLen, 0);
     *Padding[0] := $80;
     *Update(Padding, PadLen);
     *Update(BitLength, SizeOf(Int64));
     *Result := MD5Digest(FState);
     *Free;
    end;
    
    
    // ----------------------------------------------------------------------------
    
    function MD5Message(const Message; Length: Cardinal): MD5Digest;
    begin
     *with TMD5.Create do
     * *try
     * * *Update(Message, Length);
     * * *Result := Final;
     * *except
     * * *Free;
     * * *raise;
     * *end;
    end;
    
    function MD5String(const S: string): MD5Digest;
    begin
     *Result := MD5Message(Pointer(S)^, Length(S));
    end;
    
    function MD5File(const FileName: string): MD5Digest;
    {$IFDEF MSWINDOWS}
    var
     *FileHandle: THandle;
     *MapHandle: THandle;
     *ViewPointer: Pointer;
    {$ENDIF}
    begin
     *FillChar(Result, SizeOf(MD5Digest), 0);
    {$IFDEF MSWINDOWS}
     *FileHandle := CreateFile(PChar(FileName), GENERIC_READ, FILE_SHARE_READ or
     * *FILE_SHARE_WRITE, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL or
     * *FILE_FLAG_SEQUENTIAL_SCAN, 0);
     *if FileHandle <> INVALID_HANDLE_VALUE then
     * *try
     * * *MapHandle := CreateFileMapping(FileHandle, nil, PAGE_READONLY, 0, 0, nil);
     * * *if MapHandle <> 0 then
     * * * *try
     * * * * *ViewPointer := MapViewOfFile(MapHandle, FILE_MAP_READ, 0, 0, 0);
     * * * * *if ViewPointer <> nil then
     * * * * * *try
     * * * * * * *Result := MD5Message(ViewPointer^, GetFileSize(FileHandle, nil));
     * * * * * *finally
     * * * * * * *UnmapViewOfFile(ViewPointer);
     * * * * * *end;
     * * * *finally
     * * * * *CloseHandle(MapHandle);
     * * * *end;
     * *finally
     * * *CloseHandle(FileHandle);
     * *end;
    {$ENDIF}
    end;
    
    
    function MD5Print(const D: MD5Digest): string;
    const
     *Digits: array[0..15] of Char =(&quot;0&quot;,&quot;1&quot;,&quot;2&quot;,&quot;3&quot;,&quot;4&quot;,&quot;5&quot;,&quot;6&quot;,&quot;7&quot;,&quot;8&quot;,&quot;9&quot;,&quot;a&quot;,&quot;b&quot;,&quot;c&quot;,&quot;d&quot;,&quot;e&quot;,&quot;f&quot;);
    var
     *I: Integer;
     *TempStr: string[32];
    begin
     *TempStr := &quot;&quot;;
     *for I := 0 to 15 do
     * *TempStr := TempStr + Digits[D[I] shr 4] + Digits[D[I] and $f];
     *Result := TempStr;
    end;
    
    
    initialization
     *InitLUTs;
    
    end.

    دلفی ،*جذاب ترین زبان طراحی نرم افزار ...

  2. #2
    مدیرکل سایت admin آواتار ها
    تاریخ عضویت
    September 2008
    محل سکونت
    تهران ، آیسک
    سن
    39
    نوشته ها
    522
    تشکر ها
    247
    تشکر شده 250 بار در 160 ارسال.
    Blog Entries
    1
    طریقه ی استفاده در نرم افزارها ...
    کد:

    کد:
    
    implementation
    uses md5;
    procedure TLogin.SpeedButton1Click(Sender: TObject);
    var
    password : MD5Digest ;
    begin
    
    password :=MD5String(MaskEdit1.Text) ;
    
    if dm.users.Locate(&quot;id;password;&quot;,VarArrayOf([Edit1.Text,MD5Print(password)]),[loCaseInsensitive]) then
    begin
    عمل ورود به برنامه و ...
    end;



    دلفی ،*جذاب ترین زبان طراحی نرم افزار ...

  3. #3
    کاربر سایت tashvighi آواتار ها
    تاریخ عضویت
    June 2013
    سن
    11
    نوشته ها
    3
    تشکر ها
    0
    تشکر شده 1 بار در 1 ارسال .
    با سلام و ادب

    با توجه به وجود indy در نسخه های مختلف دلفی میشه از این کد هم استفاده کرد.

    کد:

    کد:
    uses
    IdHash, IdHashMessageDigest;
    
    with TIdHashMessageDigest5.Create do
     * try
     * * *MD5-code := TIdHash128.AsHex(HashValue(&quot;sample_text&quot;));
     * finally
     * * *Free;
    * end;

علاقه مندي ها (Bookmarks)

علاقه مندي ها (Bookmarks)

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •