У меня есть строка, которую нужно хэшировать с помощью соли в C# и соответствовать тому, что она будет в PHP. C# код выглядит следующим образом:C# MD5 хеширование должно соответствовать хешированию PHP MD5 (с солью)
string stringToHash = "123";
string saltToUse = "321";
byte[] stringBytes = ASCIIEncoding.ASCII.GetBytes(stringToHash);
byte[] saltBytes = ASCIIEncoding.ASCII.GetBytes(saltToUse);
var hmacMD5 = new HMACMD5(saltBytes);
var saltedHash = hmacMD5.ComputeHash(stringBytes);
byte[] hashedBytesNoSalt = MD5CryptoServiceProvider.Create().ComputeHash(stringBytes);
string hashedString = BitConverter.ToString(hashedBytesNoSalt).Replace("-", "").ToLower();
string saltedString = BitConverter.ToString(saltedHash).Replace("-", "").ToLower();
код РНР, чтобы проверить, если C#, правильно вывода является:
<?php echo md5('123'.'321'); ?>
C# выдает правильный Unsalted MD5 хэш, который является 202cb962ac59075b964b07152d234b70. Однако, когда я пытаюсь использовать соль, я получаю 900011ae860f471561023fba6cc25df6, а с PHP я получаю c8837b23ff8aaa8a2dde915473ce0991.
Я не уверен, почему это делается, или если это даже правильный путь. Следует помнить, что C# должен выводить на вывод PHP.
byte [] stringBytes = ASCIIEncoding.ASCII.GetBytes (stringToHash + saltToUse); Сделал это и работает отлично, спасибо! – MathMan08
Это не работает для сложных солей. : | – MathMan08
Можете ли вы объяснить, как это не работает? Может быть, открыть новый вопрос? – Haney