Java Sha-512 消息摘要加盐不匹配 linux 影子文件散列密码

Java Sha-512 Message Digest with salting not matching linux shadow file hashed passwords

我正在尝试使用 MessageDigest 生成在 linux 影子文件中找到的相同哈希值,给定密码、salt 值和哈希算法,尽管结果与我从下面的功能。

我有生成哈希值的函数

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 库可用).