PHP SHA512에 맞는 C#에서 SHA512 해시를 어떻게 재현 할 수 있습니까?
문제
질문은 거의 자기 설명 적입니다. 많은 사이트, 많은 방법을 검색하고 많은 인코딩을 시도했지만 일치 할 수는 없습니다.
나는 "asdasd"일치 문자열을 만들려고 노력하고 있습니다. (http://www.fileformat.info/tool/hash.htm?text=asdasd)
해결책
이 시도
using System.Security.Cryptography
public static string HashPassword(string unhashedPassword)
{
return BitConverter.ToString(new SHA512CryptoServiceProvider().ComputeHash(Encoding.Default.GetBytes(unhashedPassword))).Replace("-", String.Empty).ToUpper();
}
다른 팁
Bitconverter는 잘 작동합니다 ...
var testVal = "asdasd";
var enc = new ASCIIEncoding();
var bytes = enc.GetBytes( testVal );
var sha = new SHA512Managed();
var result = sha.ComputeHash( bytes );
var resStr = BitConverter.ToString( result );
var nodash = resStr.Replace( "-", "" );
nodash.Dump();
(512 비트 해시에 수정, 죄송합니다 :)
방금 PHP의 Crypt 기능과 일치하도록 .NET 해시 기능을 얻으려고 몇 시간을 보냈습니다. 재미 없어.
Crypt의 PHP 구현이 Base64 인코딩 된 문자열을 반환하고 여러 해시 반복을 수행하지 않기 때문에 여러 가지 과제가 있습니다 (예 : 5000은 Crypt의 기본값입니다.) 여러 라이브러리를 사용하여 .NET에서 비슷한 출력을 얻을 수 없었습니다. Cryptsharp를 찾을 때까지. PHP (또는 원래 C) 기능과 유사한 소금을 받아들입니다 (예 : "$6$round=5000$mysalt"
). 후행 $는 없으며 소금을 제공하지 않으면 무작위로 자율적으로 생성됩니다.
Cryptsharp는 여기에서 찾을 수 있습니다.http://www.zer7.com/software.php?page=cryptsharp
좋은 배경 읽기 : - http://www.akkadia.org/drepper/sha-crypt.txt
제휴하지 않습니다 StackOverflow