2010-12-05 36 views
4

這是我看到hudson/users/me/config.xml哈德森使用什麼密碼加密?

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

什麼是算法(如SHA1,比什麼是mEDUyJ前綴)?例如,我怎樣才能在PHP中獲得這個散列?

回答

6

負責此操作的源代碼可在hudson.security.HudsonPrivateSecurityRealm類(更具體地說,內部類PasswordEncoder)中找到。

考慮您的例子:

mEDUyJ:0c9e6f2556b9b3a0b9e9046c21490422b4a54877f057b527b2c0bd4dc83342d5

前綴(mEDUyJ)實際上是六個字母的鹽。鹽可以是大寫字母和小寫字母的任何六個字母的置換。

Hudson使用Acegi Security library。更具體地說,它使用該庫的ShaPasswordEncoder類。它基本上是這樣做的:

String salt = generateSomeSixLetterSalt() // Fictional function 
String passwordHash = salt + ":" + new ShaPasswordEncoder(256).encodePassword(password, salt); 

一旦你爲ShaPasswordEncoder查看源代碼,你會發現這一點,本質上是這樣做的:

// Fictional functions ahead... 
String salt = generateSomeSixLetterSalt() 
String passwordHash = salt + ":" + hex_encode(sha256_hash(utf8_encode(password + "{" + salt + "}")))