我已经查找到了一个将PHP sha512哈希值与C#中的哈希值进行匹配的代码。目前,我正在寻找一种方法从在C#中生成的哈希值得到与PHP中相同的结果。我们正逐渐从asp.net转向PHP,并需要一种在数据库中检查密码的方法。以下是用于生成哈希值的C#代码。
// Create a hash from a pwd and salt using sha512
public static string CreatePasswordHash(string _password, string _salt)
{
string saltAndPwd = String.Concat(_password, _salt);
SHA512 sha512 = new System.Security.Cryptography.SHA512Managed();
byte[] sha512Bytes = System.Text.Encoding.Default.GetBytes(saltAndPwd);
byte[] cryString = sha512.ComputeHash(sha512Bytes);
string hashedPwd = string.Empty;
for (int i = 0; i < cryString.Length; i++)
{
hashedPwd += cryString[i].ToString("X");
}
return hashedPwd;
}
在 PHP 中,我尝试过让它匹配,但似乎有几个字节的偏差。
function CreatePasswordHash($_password, $_salt)
{
$saltAndPwd = $_password . $_salt;
$hashedPwd = hash('sha512', $saltAndPwd);
return strtoupper($hashedPwd);
}
当使用相同的盐和密码时,以下是我得到的结果。第一个结果来自C#,第二个结果来自PHP:
60BB73FDA3FF7A444870C6D0DBC7C6966F8D5AD632B0A02762E0283051D7C54A5F4B01571D1A5BC8C689DBC411FEB92158383A56AFC6AE6074696AF36E16
60BB73FDA3FF7A444870C6D0DBC7C609066F8D5AD632B0A02762E0283051D7C54A5F4B001571D1A5BC8C689DBC411FEB092158383A56AFC6AE6074696AF36E16
有什么想法,为什么它们不匹配?这与字节序有关吗?