Nu har jeg ikke gennemlæst de ovenstående forslag, men her er mit - og det er lo-tech erkender jeg, men det er det jo også at have et password der ikke er fuldstændig tilfældig.
procedure TfrmMain.Button6Click(Sender: TObject);
// Name is given in the format: 'Surname, Firstname(s)'
function GetInitials(aName : string) : string;
var
p : integer;
Surname, FirstNames : string;
begin
p := pos(',',aName);
Surname := copy(aName,1,p-1);
FirstNames := trim(copy(aName,p+1,length(aName) - p));
result := LowerCase(FirstNames[1] + Surname[1]);
end;
function GetPassword(aName : string) : string;
var
st, Work : string;
i : integer;
pName : pchar;
aHash : array[0..19] of byte;
begin
GetMem(pName,40+1);
DCP_md51 := TDCP_md5.Create(self);
try
st := GetInitials(aName);
DCP_md51.Init;
StrPCopy(pName,aName);
DCP_md51.Update(pName,strlen(pName));
DCP_md51.Final(aHash);
// Af de 20 tal som hash-algoritmen generer tager jeg det bagerste ciffer
// af de seks første. Eksempelvis bliver 120 12 34 54 27 32 til 024472
// Det er langtfra sikkert, men alternativet er at gemme navn og password i
// en tabel - og det ligger ikke i oplægget fra nca
for i := 0 to 5 do begin
work := IntToStr(aHash[i]);
st := st + copy(Work,length(Work),1);
end; // for
// Hvis man vil se HASH'en
// for i := 0 to 19 do
// st := st + IntToHex(aHash[i],2) + ' ';
result := st;
finally
DCP_md51.Free;
FreeMem(pName);
end; // try
end;
begin
MessageDlg(GetPassword('Voigt, Pelle'), mtInformation, [mbOK], 0);
end;
De udemærkede hach og krypterings komponenter har jeg fra
http://www.cityinthesky.co.uk/