oracle hash password

xiaoxiao2021-02-28  68

2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 {*******************************************************} {                                                       } {       Oracle Password Hash                            } {                                                       } {       版权所有 (C) 2009 Mail:978399@qq.com  Open[xgc] } {                                                       } {*******************************************************}   unit OracleHASH;   interface   uses    Windows,SysUtils;   type     DES_cblock = array[0..7] of Byte;     des_ks_struct = packed record      ks: DES_cblock;      weak_key: Integer;    end;    des_key_schedule = array[1..16] of des_ks_struct;   procedure  DES_cbc_encrypt(Source,Dest: pointer; Len: integer; Key, IV: Pointer; Enc:integer); cdecl; external  'libeay32.dll' ; procedure DES_set_odd_parity(Key: des_cblock); cdecl; external  'libeay32.dll' ; function  DES_set_key_checked(key: des_cblock; schedule: des_key_schedule): Integer;cdecl; external  'libeay32.dll' ; function  Encrypt(name:widestring):string;   implementation     function  Encrypt(name:widestring):string; var      iv,key: DES_cblock ;      key_schedule : des_key_schedule;      num,len,i:word;      a: array [1..500]of byte;      b: array [1..500] of byte; begin      KEY[0] := $01;      KEY[1] :=$23;      KEY[2] :=$45;      KEY[3] :=$67;      KEY[4] :=$89;      KEY[5] :=$AB;      KEY[6] :=$CD;      KEY[7] :=$EF;      len := length(name) *2;      if  len mod 8 <>0  then      num := len + 8 - len mod 8      else      num := len ;     zeromemory(@a,500);      move(name[1],a[2],len);     zeromemory(@b,500);     ZeroMemory(@iv, SizeOf(iv));      DES_set_odd_parity(KEY);      DES_set_key_checked(key,key_schedule);      DES_cbc_encrypt(@a,@b,len,@key_schedule[1],@iv,1);      move(b[num-7],key[0],8);      DES_set_odd_parity(key);      DES_set_key_checked(key,key_schedule);      DES_cbc_encrypt(@a,@b,len,@key_schedule[1],@iv,1);       move(b[num-7],key[0],8);       for  i:=0 to 7  do         Result := Result + inttohex(key[i],2); end; end. 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 {*******************************************************} {                                                       } {       Oracle Password Hash                            } {                                                       } {       版权所有 (C) 2009 Mail:978399@qq.com  Open[xgc] } {                                                       } {*******************************************************}   unit OracleHASH;   interface   uses    Windows,SysUtils;   type     DES_cblock = array[0..7] of Byte;     des_ks_struct = packed record      ks: DES_cblock;      weak_key: Integer;    end;    des_key_schedule = array[1..16] of des_ks_struct;   procedure  DES_cbc_encrypt(Source,Dest: pointer; Len: integer; Key, IV: Pointer; Enc:integer); cdecl; external  'libeay32.dll' ; procedure DES_set_odd_parity(Key: des_cblock); cdecl; external  'libeay32.dll' ; function  DES_set_key_checked(key: des_cblock; schedule: des_key_schedule): Integer;cdecl; external  'libeay32.dll' ; function  Encrypt(name:widestring):string;   implementation     function  Encrypt(name:widestring):string; var      iv,key: DES_cblock ;      key_schedule : des_key_schedule;      num,len,i:word;      a: array [1..500]of byte;      b: array [1..500] of byte; begin      KEY[0] := $01;      KEY[1] :=$23;      KEY[2] :=$45;      KEY[3] :=$67;      KEY[4] :=$89;      KEY[5] :=$AB;      KEY[6] :=$CD;      KEY[7] :=$EF;      len := length(name) *2;      if  len mod 8 <>0  then      num := len + 8 - len mod 8      else      num := len ;     zeromemory(@a,500);      move(name[1],a[2],len);     zeromemory(@b,500);     ZeroMemory(@iv, SizeOf(iv));      DES_set_odd_parity(KEY);      DES_set_key_checked(key,key_schedule);      DES_cbc_encrypt(@a,@b,len,@key_schedule[1],@iv,1);      move(b[num-7],key[0],8);      DES_set_odd_parity(key);      DES_set_key_checked(key,key_schedule);      DES_cbc_encrypt(@a,@b,len,@key_schedule[1],@iv,1);       move(b[num-7],key[0],8);       for  i:=0 to 7  do         Result := Result + inttohex(key[i],2); end; end.
转载请注明原文地址: https://www.6miu.com/read-20844.html

最新回复(0)