Какое шифрование паролей использует Hudson? - PullRequest
4 голосов
/ 05 декабря 2010

Это то, что я вижу в hudson/users/me/config.xml:

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

Что такое алгоритм (если SHA1, чем префикс mEDUyJ)?Как я могу получить этот хеш в PHP, например?

1 Ответ

6 голосов
/ 05 декабря 2010

Исходный код, отвечающий за это, находится в классе hudson.security.HudsonPrivateSecurityRealm (точнее, во внутреннем классе PasswordEncoder).

Рассмотрим ваш пример:

mEDUyJ:0c9e6f2556b9b3a0b9e9046c21490422b4a54877f057b527b2c0bd4dc83342d5

Префикс (mEDUyJ) на самом деле представляет собой соль из шести букв.Соль может быть любой шестибуквенной перестановкой прописных и строчных букв.

Хадсон использует библиотеку Acegi Security .В частности, он использует класс 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 + "}")))
...