C#에서 소금을 사용하여 해싱해야하는 문자열이 있고 PHP에서와 일치해야합니다. 다음과 같이 C# 코드이다 :C# MD5 해시는 PHP MD5 해싱 (소금)과 일치해야합니다.
<?php echo md5('123'.'321'); ?>
는 C#이 202cb962ac59075b964b07152d234b70이고 정확한 무염 MD5 해시를 출력하고, 다음 C 번호가 올바르게 출력되면
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();
PHP 코드는 테스트. 그러나 C#을 사용하여 소금을 넣으려고하면 900011ae860f471561023fba6cc25df6이되고 PHP를 사용하면 c8837b23ff8aaa8a2dde915473ce0991이됩니다.
왜 이렇게하고 있는지, 이것이 올바른 방법인지 잘 모르겠습니다. 기억해야 할 것은 C#이 PHP가 출력하는 것으로 출력해야한다는 것입니다.
byte [] stringBytes = ASCIIEncoding.ASCII.GetBytes (stringToHash + saltToUse); 완벽하게 작동합니다. 감사합니다. – MathMan08
그러나 그것은 복잡한 소금을 위해 작동하지 않습니다. : | – MathMan08
어떻게 작동하지 않는지 설명 할 수 있습니까? 아마도 새로운 질문을 열어도 될까요? – Haney