7 votes

Comment puis-je reproduire un hachage SHA512 en C# qui correspond au SHA512 de PHP ?

La question est assez explicite. J'ai cherché sur Google de nombreux sites, de nombreuses méthodes, j'ai essayé de nombreux codages, mais je n'arrive pas à obtenir une correspondance.

J'essaie de faire correspondre la chaîne "asdasd". ( http://www.fileformat.info/tool/hash.htm?text=asdasd )

16voto

The Matt Points 4339

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

1voto

JP Alioto Points 33482

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

(Corrigé pour un hachage de 512 bits, désolé :)

1voto

ww1981 Points 1

Je viens de passer plusieurs heures à essayer de faire correspondre une fonction de hachage .NET à la fonction Crypt de PHP. Ce n'est pas drôle.

Il y a plusieurs défis à relever ici, puisque l'implémentation PHP de Crypt renvoie une chaîne encodée en base64, et ne fait pas de multiples itérations de hachage (par exemple, 5000 est la valeur par défaut de Crypt). Je n'ai pas été capable d'obtenir des résultats similaires avec .NET en utilisant plusieurs bibliothèques, jusqu'à ce que je trouve CryptSharp. Il accepte un sel similaire à la fonction de PHP (ou du C original) (par ex. "$6$round=5000$mysalt" ). Notez qu'il n'y a pas de queue de $, 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

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X