Le code source responsable de ceci se trouve dans la classe hudson.security.HudsonPrivateSecurityRealm
(plus précisément, la classe interne PasswordEncoder
).
Tenez compte de votre exemple:
mEDUyJ:0c9e6f2556b9b3a0b9e9046c21490422b4a54877f057b527b2c0bd4dc83342d5
Le préfixe (mEDUyJ
) est en fait un sel de six lettres. Un sel peut être une permutation de six lettres de majuscules et de minuscules.
Hudson utilise le Acegi Security library. Plus précisément, il utilise la classe ShaPasswordEncoder
de cette bibliothèque. Il est fait essentiellement ceci:
String salt = generateSomeSixLetterSalt() // Fictional function
String passwordHash = salt + ":" + new ShaPasswordEncoder(256).encodePassword(password, salt);
Une fois que vous affichez le code source pour ShaPasswordEncoder
, vous trouverez ce qu'il fait essentiellement ceci:
// Fictional functions ahead...
String salt = generateSomeSixLetterSalt()
String passwordHash = salt + ":" + hex_encode(sha256_hash(utf8_encode(password + "{" + salt + "}")))