Вверх ↑
Ответов: 20
Рейтинг: 2
#1: 2012-08-24 21:40:44 ЛС | профиль | цитата
Доброго времени суток.
Откопал в сети исходник для создания хэша авторизации сокетного клиента, и решил попробовать скормить его хиасму.
Опыта совсем мало, но учусь, -учусь
Подскажите, правильной ли дорогой иду, товарищи?


Исходный PAS
#pas
unit Hash7;

interface
uses SysUtils, dialogs;


Const var_165 = '5itndg36hj';
Const var_6dc = 94736404;
Const var_67a = 1037;

Const var_1c8 :array[0..50] of integer = (28, 30, 28, 29, 28, 29, 26, 26, 28,
26, 26, 28, 27, 27, 29, 30, 27, 27, 13, 28, 28, 17, 26, 28, 26, 24, 33, 29, 28,
28, 28, 28, 27, 29, 27, 28, 29, 29, 29, 30, 29, 29, 28, 30, 28, 29, 28, 28, 29,
30, 18);
Const var_c7 = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';

type
GHash=class(TObject)
private
Key: String;
var_649: int64;
MyLong: int64;
var7: array[0..9] of integer;
var8: array[0..9] of char;
function Gen(GotKey: String): String;
Function sub_221(var0: int64; var2: Integer; var3: Int64): int64;
Function sub_219( var1: int64):integer;
Function sub_19c(var0, var1: integer): integer;
Function sub_2d5( var2: integer):integer;
Function sub_d4c(var0: char;var1: char; var2: integer):boolean;
Function sub_82a(var0: integer): integer;
Function sub_46b(var0: integer; var1: string; var2: array of char; var3: int64; var00: array of integer; var6: integer): char;
public
constructor Create(); Overload;
class function CreateHash(GotKey: String): String;
published
constructor Create(GotKey: String); Overload;
destructor Destroy(); override;
function Generate(): String;
procedure SetGotKey(GotKey: String);
end;

implementation


Function GHash.sub_46b(var0: integer; var1: string; var2: array of char; var3: int64; var00: array of integer; var6: integer): char;
var
var000: string;
var70, nn: integer;
begin
var1:= var8;
for var70:= 0 to 9 do begin
var7[var70]:= var7[var70]+ ( var6 or integer(var1[var70+1]));
var7[var70] := var7[var70] + var0 + var3;
var6 :=var6+ var7[var70];
var7[var70] :=var7[var70]+ var_6dc;
var8[var70] := var_c7[abs(var7[var70] mod length(var_c7))+1] ;
end;
result:= char(0);
end;

function GHash.sub_82a(var0: integer): integer;
begin
Result:= var_1c8[abs(var0 mod length(var_1c8))];
end;

Function GHash.sub_d4c(var0: char;var1: char; var2: integer):boolean;
begin
result:= abs(ord(var0)-ord(var1)) >= var2 + sub_82a(var2);
end;

Function GHash.sub_2d5(var2: integer):integer;

var
var3: integer;
var4, var5, var6: integer;
begin
for var3:=0 to 39 do begin
var4 := var3 mod 10;
var5:= abs(var3 * var7[var4] + var7[var4]) mod 10;
if sub_d4c(var8[var4], var8[var5], 10) then begin
var7[(var4 + var5) div 2]:= var7[(var4 + var5) div 2]+1;
var7[var4] :=var7[var4]+ ord(var8[var5]);
var7[var5] :=var7[var5]+ ord(var8[var4]);
var2:= var2+1;
end;
end;
result:=var2;
end;

Function GHash.sub_19c(var0, var1: integer): integer;
begin
if var0 < 0 then result:= 0 else begin
if var1 <= var0 then result := var0 else begin
randomize;
Result:= var0 + abs(random(54654654) mod (var1-var0));
end;
end;
end;

function GHash.sub_219( var1: int64): integer;
var
var3: integer;
begin
var7[0] := ord((var1 + var1 + var_6dc) * var1);
for var3:= 1 to length(var7)-1 do begin
var7[var3] :=integer( (var1 + var3 + var7[var3 -1]) * var1);
end;
Result:= sub_19c(10000, 1000000);
end;

Function GHash.sub_221(var0: int64; var2: Integer; var3: Int64): Int64;
var
var5: integer;
begin
for var5:= var2 downto 1 do begin
var0:= var0 + (var3 * (Pos(var_165[var5] , var_c7)) + var_6dc);
var3 := var3* 63;
end;
Result:= var0;
end;


constructor GHash.Create();
begin
Key := '';
var_649 := -6341662746819428352;
// 6936934864827449344;
end;

constructor GHash.Create(GotKey: String);
var i:integer;
begin
Key := GotKey;
var_649 := -6341662746819428352;
//6936934864827449344;
end;

destructor GHash.Destroy();
begin
Key := '';
inherited;
end;

procedure GHash.SetGotKey(GotKey: String);
begin
Key := GotKey;
end;

class function GHash.CreateHash(GotKey: String): String;
var Hash:GHash;
begin
Hash := GHash.Create(GotKey);
Result := Hash.Generate;
Hash.Destroy;
end;


function GHash.Gen(GotKey: String): String;
var
var1: string;
var2: int64;
var4: integer;


var9: boolean;
var11: integer;
var13: integer;
tmp, tmp2: integer;
begin
try
var1:= '';
var2:= 508; // 508
MyLong:= -000;
var2:= var_649+ var2;
for var4:= 0 to length(gotkey) do begin
var2:= var2+ (ord( gotkey[var4])*var_649);
end;
var4 := length( var_165);
var2 := sub_221(var2, var4, 1);
for tmp:= 1 to length(var_165) do
var8[tmp-1]:= var_165[tmp];
var9 := false;
var11 := sub_219( var2);
var13 := sub_2d5( 1);
var11:= var11*var13;
if(sub_46b(var4, Key + var_165, var8, var2, var7, var13) <> '') then
var1 := IntToStr(var11 * 123) else var1 := var8;
Result:= var1;
except
end;



end;

function GHash.Generate(): String;
begin
if(Key<>'')then Result := Gen(Key)
else Result := '123'; // Error
end;

end.


Какой IC получился:

code_28873.txt

Схема в целом:

code_28874.txt

Буду рад, если кто наставит на путь истинный, если что не так
Ну, или может кому исходный pas пригодится
карма: 1

0
файлы: 2code_28873.txt [5KB] [104], code_28874.txt [5.9KB] [119]