2009-09-13 6 views
7

La question est assez explicite. Je ai googlé de nombreux sites, de nombreuses méthodes, essayé de nombreux encodages, mais je ne peux pas le faire correspondre. J'essaie de faire correspondre la chaîne "asdasd" avec la chaîne de caractèresComment puis-je reproduire un hachage SHA512 en C# correspondant au PHP SHA512?

(http://www.fileformat.info/tool/hash.htm?text=asdasd)

+1

PHP ne dispose pas d'une implémentation SHA-512 pour autant que je sache. Pourriez-vous poster le code que vous utilisez? –

+1

J'avais tort. PHP semble prendre en charge un certain nombre de fonctions de hachage: http://www.php.net/hash –

+0

Mais j'aimerais quand même voir le code que vous utilisez pour répondre à cette question. (désolé pour le spamming les commentaires :-D) –

Répondre

16

Essayez cette

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

Facile, gentil, petit, rapide laisse dire parfait! – Polo

+0

Le SHA612CryptoServiceProvider n'est-il pas un objet jetable? Cela entraînera-t-il une fuite d'une instance de fournisseur de services à chaque appel? –

+0

il y a un sha612 maintenant? J'aurais juré qu'il était 512 ...^_^ – r3wt

1

BitConverter fonctionne très bien ...

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

(fixe pour hachage 512 bits, désolé :)

+0

Je ne sais pas si c'est juste une faute de frappe dans votre code, mais il demandait sha512, pas sha256. –

0

Je viens de passer plusieurs heures essayer d'obtenir une fonction de hachage .NET pour correspondre à la fonction Crypt de PHP. Pas drôle. Il y a plusieurs défis ici, car l'implémentation PHP de Crypt renvoie une chaîne codée en base64, et ne fait pas plusieurs itérations de hachage (par exemple 5000 est la valeur par défaut pour Crypt). Je n'ai pas pu obtenir des sorties similaires de .NET en utilisant plusieurs bibliothèques, jusqu'à ce que je trouve CryptSharp. Il accepte un sel similaire à la fonction de PHP (ou à la fonction C d'origine) (par exemple "$6$round=5000$mysalt"). Notez qu'il n'y a pas de $, et que si vous ne fournissez pas de sel, il en générera un au hasard.

Vous pouvez trouver ici CryptSharp: http://www.zer7.com/software.php?page=cryptsharp

Bonne lecture de fond: - http://www.akkadia.org/drepper/SHA-crypt.txt

Questions connexes