Unit Hash; {*************************************************************************** * * * Copyright 1989 Trevor J Carlsen * * All rights reserved * * Rovert Software Consulting Services * * PO Box 568 * * Port Hedland Western Australia 6721 * * Telephone (091) 732026 or (091) 732569 * * * ***************************************************************************} Interface Uses Strings, sundry; Function hashcode(st : String; Var nwd : Word): Word; Implementation Function MakeCodeStr(key : LongInt; st : String): String; Var x : Word; len : Byte Absolute st; begin RandSeed := (key * len) div ord(st[len]); MakeCodeStr[0] := st[0]; For x := 1 to len do MakeCodeStr[x] := chr(Random(255)); end; Function Key(st: String): LongInt; Var len : Byte Absolute st; x,y : Byte; temp : LongInt; tempst : Array[0..3] of Byte; Procedure makekey(Var k; Var s : LongInt); Var t : LongInt Absolute k; rec : Record Case Byte of 1 :(b : LongInt; c : Word); 2 :(d : Word ; e : LongInt); 3 :(r : Real); end; begin RandSeed := t; rec.r := random; s := s xor rec.b xor rec.e; end; begin temp := 0; For x := 1 to len-3 do begin For y := 0 to 3 do tempst[y] := Byte(st[x + y]); makekey(tempst,temp); end; Key := temp; end; Function EncryptStr(key : LongInt; st : String): String; Var len : Byte Absolute st; cnt,x : Byte; temp,CodeStr : String; begin CodeStr := MakeCodeStr(key,st); temp[0] := st[0]; temp[len] := st[len]; For x := 1 to len-1 do begin cnt := ord(st[x]) xor ord(CodeStr[x]); temp[x] := chr(cnt); end; cnt := ord(st[len]) xor len; temp[len] := chr(cnt); EncryptStr := temp; end; Function hashcode(st : String; Var nwd : Word): Word; Var k : LongInt; len : Byte Absolute st; s : String; begin k := key(st) * nwd; st := StUpCase(st); s := CompressStr(st); move(s[1],nwd,2); if len < 4 then st := st + '!@#$'; {-Force String to a minimum length} st := EncryptStr(k,st); st := EncryptStr(Key(st),st); hashcode := key(st) shr 16; end; {hash} end. { > Procedure Hash(p : Pointer; numb : Byte; Var result: LongInt); > ... Is this the way that you were referring to storing passWords? > if so could further explain the usage of this Procedure? Thanx!! Yes, but I take issue With the Word "store". Storing the passWord hash is not storing the passWord as the passWord cannot be determined by examining the hash - even if the hash algorithm is known. to use the Procedure - When the passWord is first created, calculate its hash and store that value somewhere - either in a File or in the exe. then when the passWord is used just - Hash(@passWord,length(passWord),EnteredHash); if PwdHash = EnteredHash then PassWord_Entered_is_Correct. }