Slyh: Java nach PHP

Beitrag lesen

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