Die Erklärung ist echt der Wahnsinn das stimmt.
Ein eigener Hash? Klingt lustig, würde ich aber niemals hinbekommen
Warum nicht?
Delphi-Quellcode:
function KomischerHash(s : String; iHashLen : Integer) : String;
var
i : Cardinal;
k : Integer;
begin
i := 0;
for k := 1 to Length(s) do begin
i := i + Ord(s[k]);
if i > MaxLongInt then i := i mod MaxLongInt;
end;
Result := '';
s := IntToStr(i);
for k := 1 to Length(s) do Result := Result + IntToHex(Ord(s[k]),2);
while Length(Result) < iHashLen do Result := Result + ReverseString(Result);
Result := Copy(Result,1,iHashLen);
end;
Statt 'nem String kann man auch 'nen Stream nehmen und den byteweise durchgehen. (Wäre für 'ne EXE sicherlich sinnvoller.)
Eigentlich ist nur Phantasie gefordert.
Und unterschiedliche Eingaben sollten (wenn möglich) zu unterschiedlichen Ergebnissen führen. (Der Hash sollte nicht immer 42 sein
)
Vom Ergebnis muss / darf kein Rückschluss auf die Eingabe möglich sein.
Und die Ergebnisse müssen reproduzierbar sein.
Betrachte doch einfach mal diverse Prüfziffern (ISBN, Personalausweisnummer, IBAN ...)
Mehrere dieser "Zeichenfolgen" haben die gleiche Prüfziffer. Aus der Prüfziffer kann man aber nicht auf die "Zeichenfolge" zurückschließen.
Aber wenn Du den Algorithmus kennst, kannst Du jederzeit die Prüfziffer neu berechnen und bei fehlender Übereinstimmung auf eine Manipulation der "Zeichenfolge" schließen.