我一直在尝试将 C# 加密技术转换为 PHP。C# 代码如下所示。我没有 C# 的经验。我不得不接管 C# 中的项目
private void button1_Click(object sender, EventArgs e)
{
//byte[] response = ComputeHash("pradeep14520", BitConverter.GetBytes("0x9A111B734E4F10469668"));
//byte[] response = ComputeHash("pradeep14520", dictionary.ElementAt(0).Value.Salt);
byte[] response =ComputeHash("pradeep14520", StringToByteArray("9A111B734E4F10469668"));
string hex = BitConverter.ToString(response).Replace("-", string.Empty);
string base64 = Convert.ToBase64String(response); // 683CA8E00E8CE41A079B7C86CE4960AC2376CD85F2AEAB2E4DF99FFA7F7FA4F3
}
private byte[] ComputeHash(string password, byte[] storedSalt)
{
byte[] passwordBytes = Encoding.Unicode.GetBytes(password);
if ((int)storedSalt.Length > 0)
{
byte[] passwordAndSalt = new byte[(int)passwordBytes.Length + (int)storedSalt.Length];
passwordBytes.CopyTo(passwordAndSalt, 0);
storedSalt.CopyTo(passwordAndSalt, (int)passwordBytes.Length);
passwordBytes = passwordAndSalt;
}
return new SHA256Managed().ComputeHash(passwordBytes);
}
我已经在按钮单击功能中评论了示例响应。我尝试使用 PHP 实现相同的功能。参考此链接后使用以下代码
.我发现没有必要在 PHP 中生成字节数组,因为字符串是 php 中的字节数组。
$originalSalt = 'pradeep14520';
$originalSalt .= '9A111B734E4F10469668';
hash("sha256",iconv(mb_detect_encoding($originalSalt, mb_detect_order(), false), "UTF-8", $originalSalt),true);
我已将最后一个参数作为 false 传递给哈希函数,以获得原始输出。但是我得到了不同的 PHP 和 C# 输出
for PHP :afc80d1a6cae81e8f868b054dafbb74bdd86399d771fceef574e4b373506b704
for C# :683CA8E00E8CE41A079B7C86CE4960AC2376CD85F2AEAB2E4DF99FFA7F7FA4F3
请帮忙。提前致谢。
根据 Daniel Hilgarth 提供的建议,我修改了代码并使其工作。
$password = 'pradeep14520';
$originalSalt = hex2bin('9A111B734E4F10469668');
echo strtoupper(hash("sha256",mb_convert_encoding($password,"UTF-16LE").$originalSalt,false));
我希望它会帮助某人..