2009-09-13 9 views
7

Pytanie jest dość oczywiste. Przeszukałem wiele witryn, wiele metod, próbowałem wielu kodowań, ale nie mogę tego dopasować.Jak mogę odtworzyć skrót SHA512 w języku C#, który pasuje do PHP SHA512?

Próbuję dopasować ciąg "asdasd". (http://www.fileformat.info/tool/hash.htm?text=asdasd)

+1

PHP nie posiada realizację SHA-512 o ile wiem. Czy możesz opublikować kod, którego używasz? –

+1

Myliłem się. PHP wydaje się obsługiwać kilka funkcji skrótu: http://www.php.net/hash –

+0

Ale nadal chciałbym zobaczyć kod, którego używasz do udzielenia odpowiedzi na to pytanie. (przepraszam za spamowanie komentarzy :-D) –

Odpowiedz

16

Spróbuj

using System.Security.Cryptography 

public static string HashPassword(string unhashedPassword) 
{ 
    return BitConverter.ToString(new SHA512CryptoServiceProvider().ComputeHash(Encoding.Default.GetBytes(unhashedPassword))).Replace("-", String.Empty).ToUpper(); 
} 
+2

Łatwy, miły, mały, szybki pozwala powiedzieć idealnie! – Polo

+0

Czy SHA612CryptoServiceProvider nie jest obiektem jednorazowym? Czy to przeciek wystąpienie dostawcy usług dla każdego połączenia? –

+0

jest teraz sha612? mógł przysiąc, że to było 512 ...^_^ – r3wt

1

BitConverter działa dobrze ...

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(); 

(Fixed dla 512-bitowego hash, przepraszam :)

+0

Nie wiem, czy to tylko literówka w twoim kodzie, ale prosił o sha512, a nie sha256. –

0

Właśnie spędziłem kilka godzin próbuje uzyskać funkcję skrótu .NET, aby dopasować funkcję Crypt PHP. Nie śmieszne.

Jest tu wiele wyzwań, ponieważ implementacja PHP Crypt zwraca kodowany ciągiem base64 i nie wykonuje wielokrotnych iteracji mieszających (np. 5000 jest domyślnym dla Crypt.) Nie mogłem uzyskać podobnych wyników z .NET używając kilku bibliotek, dopóki nie znalazłem CryptSharp. Akceptuje sól podobną do funkcji PHP (lub oryginalnej C) (np. "$6$round=5000$mysalt"). Zauważ, że nie ma końcowego znaku $, a jeśli nie dostarczysz soli, automatycznie wygeneruje losową.

można znaleźć CryptSharp tutaj: http://www.zer7.com/software.php?page=cryptsharp

Dobra lektura: - http://www.akkadia.org/drepper/SHA-crypt.txt

Powiązane problemy