Java Sha-512 消息摘要加盐不匹配 linux 影子文件散列密码
Java Sha-512 Message Digest with salting not matching linux shadow file hashed passwords
我正在尝试使用 MessageDigest 生成在 linux 影子文件中找到的相同哈希值,给定密码、salt 值和哈希算法,尽管结果与我从下面的功能。
- 哈希算法 = 6
- 密码=普通话
- 盐值 = 5H0QpwprRiJQR19Y
预期输出 = $6$5H0QpwprRiJQR19Y$bXGOh7dIfOWpUb/Tuqr7yQVCqL3UkrJns9.7msfvMg4ZOPsFC5Tbt32PXAw9qRFEBs1254aLimFeNM8YsYOv。
Actual Output = ca0d04319f273d36f246975a4f9c71d0184c4ca7f3ba54bc0b3e0b4106f0eefca1e9a122a536fb17273b1077367bf68365c10fa8a2b18285a6825628f3614194
我有生成哈希值的函数
public String getSha512Hash(String password, String saltValue) throws NoSuchAlgorithmException{
String text = saltValue + password ;
MessageDigest messageDigest = MessageDigest.getInstance("SHA-512");
byte[] bytes = messageDigest.digest( text.getBytes() );
StringBuilder sb = new StringBuilder();
for (int i = 0; i < bytes.length; ++i) {
sb.append(Integer.toHexString((bytes[i] & 0xFF) | 0x100).substring(1,3));
}
return sb.toString();
}
我指的是 this 网站。
/etc/shadow
中的密码使用 crypt(3)
系统调用 (man crypt
) 进行哈希处理。
您可以使用应该模仿相同行为的 Apache Commons implementation。
根本问题是您所指的站点使用 Perl 的 crypt()
which seems a direct call to libc crypt()
. In the manual of crypt is not specified how the SHA-512 hash is actually computed, but I searched GitHub and found this ~400 LOC source file sha512-crypt.c。
我通读了它,但无法判断它是否指的是某种标准,或者它是否是唯一使用该算法的程序。由于 SHA-512 似乎也是 POSIX 标准的专有扩展,这绝对不是不可能的。
您可以询问维护者或邮件列表并报告您的发现,否则如果您绝对需要该功能,您可以编写本机扩展(不知道是否有 Java 库可用).
我正在尝试使用 MessageDigest 生成在 linux 影子文件中找到的相同哈希值,给定密码、salt 值和哈希算法,尽管结果与我从下面的功能。
- 哈希算法 = 6
- 密码=普通话
- 盐值 = 5H0QpwprRiJQR19Y
预期输出 = $6$5H0QpwprRiJQR19Y$bXGOh7dIfOWpUb/Tuqr7yQVCqL3UkrJns9.7msfvMg4ZOPsFC5Tbt32PXAw9qRFEBs1254aLimFeNM8YsYOv。
Actual Output = ca0d04319f273d36f246975a4f9c71d0184c4ca7f3ba54bc0b3e0b4106f0eefca1e9a122a536fb17273b1077367bf68365c10fa8a2b18285a6825628f3614194
我有生成哈希值的函数
public String getSha512Hash(String password, String saltValue) throws NoSuchAlgorithmException{
String text = saltValue + password ;
MessageDigest messageDigest = MessageDigest.getInstance("SHA-512");
byte[] bytes = messageDigest.digest( text.getBytes() );
StringBuilder sb = new StringBuilder();
for (int i = 0; i < bytes.length; ++i) {
sb.append(Integer.toHexString((bytes[i] & 0xFF) | 0x100).substring(1,3));
}
return sb.toString();
}
我指的是 this 网站。
/etc/shadow
中的密码使用 crypt(3)
系统调用 (man crypt
) 进行哈希处理。
您可以使用应该模仿相同行为的 Apache Commons implementation。
根本问题是您所指的站点使用 Perl 的 crypt()
which seems a direct call to libc crypt()
. In the manual of crypt is not specified how the SHA-512 hash is actually computed, but I searched GitHub and found this ~400 LOC source file sha512-crypt.c。
我通读了它,但无法判断它是否指的是某种标准,或者它是否是唯一使用该算法的程序。由于 SHA-512 似乎也是 POSIX 标准的专有扩展,这绝对不是不可能的。
您可以询问维护者或邮件列表并报告您的发现,否则如果您绝对需要该功能,您可以编写本机扩展(不知道是否有 Java 库可用).