Der dafür zuständige Quellcode befindet sich in der hudson.security.HudsonPrivateSecurityRealm
Klasse (genauer gesagt der PasswordEncoder
inneren Klasse).
Betrachten Sie Ihr Beispiel:
mEDUyJ:0c9e6f2556b9b3a0b9e9046c21490422b4a54877f057b527b2c0bd4dc83342d5
Das Präfix (mEDUyJ
) ist eigentlich ein Sechs-Buchstaben-Salz. Ein Salz kann eine beliebige sechsstellige Permutation von Groß- und Kleinbuchstaben sein.
Hudson verwendet die Acegi Security library. Genauer gesagt verwendet es die Klasse ShaPasswordEncoder
dieser Bibliothek. Es tut im Grunde diese:
String salt = generateSomeSixLetterSalt() // Fictional function
String passwordHash = salt + ":" + new ShaPasswordEncoder(256).encodePassword(password, salt);
Sobald Sie den Quellcode für ShaPasswordEncoder
sehen Du findest es im Wesentlichen dies zu tun:
// Fictional functions ahead...
String salt = generateSomeSixLetterSalt()
String passwordHash = salt + ":" + hex_encode(sha256_hash(utf8_encode(password + "{" + salt + "}")))