mogel
10. Mai 2014 um 05:04
1
Moin,
ich habe hier eine Methoden in PHP - Erzeugen eines Hashs für ein Passwort
public function setPassword($password, $rounds = '3') {
$this->hash = $this->randomShortHash();
$string = hash_hmac ( "whirlpool", str_pad ( $password, strlen ( $password ) * 4, sha1 ( $this->email ), STR_PAD_BOTH ), $this->hash, true );
$salt = substr ( str_shuffle ( './0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' ) , 0, 22 );
$password = crypt ( $string, '$2a$' . $rounds . '$' . $salt );
$this->password = $password;
}
nun muss ich den gleichen Hash für das Passwort über Java erzeugen - ick habe NULL Ahnung wie das geht bzw. wonach ich suchen muss
Hätte da jemand mal einen Tipp für mich?
danke, mogel
Dass die Salt Komponente zufällig erzeugt wird, ist dir aber bewusst? Was heißt denn „den gleichen Hash“, muss das Verfahren gleich sein, hast du den Salt Wert und musst daraus das selbe PW generieren… ?
mogel
10. Mai 2014 um 05:31
3
Dass die Salt Komponente zufällig erzeugt wird, ist dir aber bewusst? Was heißt denn „den gleichen Hash“, muss das Verfahren gleich sein, hast du den Salt Wert und musst daraus das selbe PW generieren… ?
ja ist mir bewusst - ich komme prinzipiell an alle nötigen Informationen die in PHP verwendet werden auch unter Java ran
Okay, wollte nur sicherstellen, dass wir vom selben Thema sprechen
Die php.net Doku ist doch eigentlich recht hilfreich:
http://docs.php.net/manual/de/function.crypt.php
Basiert auf DES
http://www.php.net/manual/de/function.hash-hmac.php
HMAC kannte ich bisher auch noch nicht, hier versucht zumindest jmd eine Java Implementierung (einer Variante davon): http://stackoverflow.com/questions/7124735/hmac-sha256-algorithm-for-signature-calculation
Das scheint z.B. mit der javax.crypto API zu funktionieren.
Für „randomShortHash()“ müsste man natürlich die Methode sehen
mogel
11. Mai 2014 um 01:55
5
ich schau mir das mal an - denke aber das ich den Passwort/Hash/Verschlüsselungsteil nochmal etwas anpassen werde
Mit der crypt Funktion kann man nicht nur DES basiert hashen. In diesem Fall wird blowfish verwendet, was man an der Verwendung von $2a$ als Präfix des salt sieht.
Mit der crypt Funktion werden Hashes erzeugt, wie sie z. B. in der /etc/shadow Datei auf Unixsystemen auftauchen.
Wenn ich mich nicht irre, fehlt in der Zeile 6 noch ein . '$'
: $password = crypt ( $string, '$2a$' . $rounds . '$' . $salt . '$');
Ich habe mal kurz gegooglet und bin dabei auf diese Seiten gestoßen:
http://docs.oracle.com/javase/7/docs/technotes/guides/security/StandardNames.html#Mac
java, whirlpool
Demzufolge kann Java standardmäßig keinen Whirlpool-Hash und dadurch auch keinen Whirlpool-HMAC berechnen.
*** Edit ***
Ich denke, mit gnu crypto solltest du weiterkommen, sofern die Lizenz es dir erlaubt, die Bibliothek zu nutzen.
Kurzes lesen der Doku lässt mich vermuten, dass dein Code zum Erzeugen des HMAC in etwa so aussehen müsste (ungetestet!):
IMac whirlpool = MacFactory.getInstance("hmac-whirlpool");
whirlpool.update(password.getBytes("UTF-8"), 0, password.length());
byte[] hmac = whirlpool.digest();```