2010-12-05 11 views
4

Dies ist, was ich in hudson/users/me/config.xml sehen:Welche Passwortverschlüsselung verwendet Hudson?

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

Was ist der Algorithmus (wenn SHA1, als das, was ist der mEDUyJ Präfix)? Wie kann ich diesen Hash beispielsweise in PHP bekommen?

Antwort

6

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