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#からのもので、2番目の結果はPHPからのものです。
60BB73FDA3FF7A444870C6D0DBC7C6966F8D5AD632B0A02762E0283051D7C54A5F4B01571D1A5BC8C689DBC411FEB92158383A56AFC6AE6074696AF36E16
60BB73FDA3FF7A444870C6D0DBC7C609066F8D5AD632B0A02762E0283051D7C54A5F4B001571D1A5BC8C689DBC411FEB092158383A56AFC6AE6074696AF36E16
これらが一致しない理由についてのアイデアはありますか?エンディアンのバイト順序と関係がありますか?