2010-12-05 12 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)は、実際に6文字の塩です。塩は、大文字と小文字の6文字の任意の順列にすることができます。

ハドソンはAcegi Security libraryを使用します。具体的には、そのライブラリのShaPasswordEncoderクラスを使用します。基本的にこれをやっている:あなたはShaPasswordEncoderのためにソースコードを表示すると

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

、あなたはこれを見つけることは、本質的に、このやっている:

// Fictional functions ahead... 
String salt = generateSomeSixLetterSalt() 
String passwordHash = salt + ":" + hex_encode(sha256_hash(utf8_encode(password + "{" + salt + "}"))) 
関連する問題