Comment puis-je reproduire un hachage SHA512 en C # qui correspond au PHP SHA512?
Question
La question est assez explicite. J'ai cherché sur Google de nombreux sites, de nombreuses méthodes, essayé de nombreux encodages, mais je n'arrive pas à les faire correspondre.
J'essaie de créer la chaîne " asdasd " rencontre. ( http://www.fileformat.info/tool/hash.htm?text= asdasd )
La solution
Essayez ceci
using System.Security.Cryptography
public static string HashPassword(string unhashedPassword)
{
return BitConverter.ToString(new SHA512CryptoServiceProvider().ComputeHash(Encoding.Default.GetBytes(unhashedPassword))).Replace("-", String.Empty).ToUpper();
}
Autres conseils
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();
(Correction du hachage 512 bits, désolé:)
Je viens de passer plusieurs heures à essayer d’obtenir une fonction de hachage .NET identique à la fonction Crypt de PHP. Pas drôle.
Les défis sont multiples, car l’implémentation PHP de Crypt renvoie une chaîne encodé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 de sorties similaires à partir de .NET en utilisant .NET plusieurs bibliothèques, jusqu'à ce que j'ai trouvé CryptSharp. Il accepte un sel similaire à la fonction PHP (ou à la fonction C d'origine) (par exemple, "6 $ round = 5000 $ mysalt"
). Notez qu'il n'y a pas de suivi $ et que si vous ne fournissez pas de sel, il en générera automatiquement un au hasard.
Vous pouvez trouver CryptSharp ici: http://www.zer7.com/software.php?page=cryptsharp
Bonne lecture de fond: - http://www.akkadia.org/drepper/SHA-crypt.txt