【发布时间】:2016-08-07 17:14:48
【问题描述】:
我正在尝试使用 MessageDigest 生成与在 linux shadow 文件中找到的相同的哈希,给定密码、盐值和哈希算法,尽管结果与我从下面的函数中得到的不匹配。
- 哈希算法 = 6
- 密码 = mandar
- 盐值 = 5H0QpwprRiJQR19Y
预期输出 = $6$5H0QpwprRiJQR19Y$bXGOh7dIfOWpUb/Tuqr7yQVCqL3UkrJns9.7msfvMg4ZOPsFC5Tbt32PXAw9qRFEBs1254aLimFeNM8YsYOv。
实际输出 = ca0d04319f273d36f246975a4f9c71d0184c4ca7f3ba54bc0b3e0b4106f0eefca1e9a122a536fb17273b1077367bf68365c10fa8a8a2b1828518a>498a>
我有这个生成哈希值的函数
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网站。
【问题讨论】:
-
您在比较两个不同的东西:“预期输出”是一个字符串,包括哈希算法、盐和 base 64 编码中的哈希,“实际输出”是 base 中的哈希16(十六进制)编码。
-
另请注意,您正在假设 1) 盐的位置(如果它不包括任何额外的东西)和 2) SHA-512 只应用一次(而不是在类似的迭代在密码哈希函数中很常见。