java – Hudson使用什么密码加密?

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

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

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

解决方法:

负责此操作的源代码可在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 + "}")))
上一篇:c# – SHA-1散列字节数组与文件流


下一篇:为什么Javascript sha1和PHP5 sha1为utf-8字符串生成不同的结果?