【问题标题】:What password encryption Hudson is using?Hudson 使用什么密码加密?
【发布时间】:2023-10-20 20:06:02
【问题描述】:

这是我在hudson/users/me/config.xml看到的:

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

算法是什么(如果是 SHA1,那么mEDUyJ 前缀是什么)?例如,如何在 PHP 中获取此哈希?

【问题讨论】:

    标签: java hudson sha1


    【解决方案1】:

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

    【讨论】:

    • 链接已失效:很抱歉 java.net 站点已关闭。
    最近更新 更多