Hallo,
private String hash(String input) {
MessageDigest sha;try {
sha = MessageDigest.getInstance("SHA");
sha.update(input.getBytes());byte[] md5Bytes = sha.digest(input.getBytes());
SHA auf den Eingabe-String anwenden. Das Ergebnis ist ein Byte-Array.
StringBuffer hexValue = new StringBuffer("*");
Der StringBuffer hexValue wird mit "*" vorbelegt. (Die erzeugten
Hash-Werte fangen also immer mit einem Stern an.)
for (int i=0; i<md5Bytes.length; i++)
{
int val = md5Bytes[i] & 0xff;
Durch diesen "Hack" wird ein byte-Wert, der in der Logik eigentlich
vorzeichenlos ist, durch den Wertebereich vom byte-Datentyp aber
im Bereich von -128 bis +127 interpretiert wird, wieder in den eigentlich
gewünschten vorzeichenlosen Wert "gewandelt" und in einen Integer
gespeichert.
Falls dich das genauer interessiert, kann ich darauf noch näher eingehen.
if (val < 16) hexValue.append("0");
Ist der Wert dann kleiner 16, wird zuerst noch eine "0" geschrieben,
weil die nachfolgende Konvertierung der Zahl in einen HEX-Wert bei
Zahlen <16 nur ein einstelliges Ergebnis zurückliefert.
hexValue.append(Integer.toHexString(val));
Hier wird dann der Wert in hexadezimale Schreibweise gewandelt und an
den Ergebnis-StringBuffer angehängt.
}
//Maintenance.debugOutput("Hashing "+input+" to "+hexValue.toString());
return hexValue.toString();
Hier wird der StringBuffer in einen String gewandelt und zurückgeliefert.
Im Grunde wird mit der Funktion also nichts anderes gemacht, als die
einzelnen SHA-Werte (Bytes) jeweils separat in den Hex-Wert zu wandeln,
an den Ergebnis-String anzuhängen und diesen zurückzuliefern.
Gruß
Slyh