2010-12-05 23 views
4

C'est ce que je vois dans hudson/users/me/config.xml:Quel cryptage de mot de passe Hudson utilise-t-il?

[...] 
<hudson.security.HudsonPrivateSecurityRealm_-Details> 
    <passwordHash>mEDUyJ:0c9e6f2556b9b3a0b9e9046c21490422b4a54877f057b527b2c0bd4dc83342d5</passwordHash> 
</hudson.security.HudsonPrivateSecurityRealm_-Details> 
[...] 

Quel est l'algorithme (si SHA1, que ce qui est le préfixe mEDUyJ)? Comment puis-je obtenir ce hachage en PHP, par exemple?

Répondre

6

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 + "}")))