gpt4 book ai didi

Java SHA512 摘要输出不同于 PHP 脚本

转载 作者:搜寻专家 更新时间:2023-10-31 21:13:07 27 4
gpt4 key购买 nike

有人能弄清楚为什么这些(php 和 java)代码片段的输出不会为相同的输入返回相同的 SHA512 吗?

$password = 'whateverpassword';
$salt = 'ieerskzcjy20ec8wkgsk4cc8kuwgs8g';
$salted = $password.'{'.$salt.'}';
$digest = hash('sha512', $salted, true);
echo "digest: ".base64_encode($digest);
for ($i = 1; $i < 5000; $i++) {
$digest = hash('sha512', $digest.$salted, true);
}
$encoded_pass = base64_encode($digest);
echo $encoded_pass;

这是android应用程序的代码:

public String processSHA512(String pw, String salt, int rounds)
{
try {
md = MessageDigest.getInstance("SHA-512");
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
throw new RuntimeException("No Such Algorithm");
}

String result = hashPw(pw, salt, rounds);
System.out.println(result);
return result;
}

private static String hashPw(String pw, String salt, int rounds) {
byte[] bSalt;
byte[] bPw;

String appendedSalt = new StringBuilder().append('{').append(salt).append('}').toString();

try {
bSalt = appendedSalt.getBytes("ISO-8859-1");
bPw = pw.getBytes("ISO-8859-1");
} catch (UnsupportedEncodingException e) {
throw new RuntimeException("Unsupported Encoding", e);
}

byte[] digest = run(bPw, bSalt);
Log.d(LCAT, "first hash: " + Base64.encodeBytes(digest));
for (int i = 1; i < rounds; i++) {
digest = run(digest, bSalt);
}

return Base64.encodeBytes(digest);
}

private static byte[] run(byte[] input, byte[] salt) {
md.update(input);
return md.digest(salt);
}

base64 编码的库是这样的:base64lib

这段 java 代码实际上是我在 StackOverflow 中围绕另一个问题找到的一些修改后的代码。尽管 Android 代码运行良好,但它与 php 脚本的输出不匹配。它甚至不匹配第一个哈希值!

注意 1:在 php 上 hash('sha512',$input, $raw_output) 返回原始二进制输出

注意 2:在 java 上,我尝试更改字符集(UTF-8、ASCII),但它也没有用。

注意 3:无法更改来自服务器的代码,因此,如果您能回答有关如何更改我的 android 代码的任何问题,我将不胜感激。

最佳答案

第一个散列在服务器和 Java 中应该相同。但是在循环中,附加到摘要的是 PHP 代码中的 password{salt},但在 Java 代码中只有 {salt}

关于Java SHA512 摘要输出不同于 PHP 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14772853/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com