2013-01-14 3 views
3

J'ai créé un compte sur mon application web (Symfony2 avec FOSUserBundle) et enregistré avec le mot de passe "lolwut" (sans les guillemets).Symfony2 (FOSUserBundle) SHA512 hachage ne correspond pas C# SHA512 hachage

Ce sont les paramètres dans ma config security.yml:

security: 
    encoders: 
     FOS\UserBundle\Model\UserInterface: 
      algorithm: sha512 
      iterations: 1 
      encode_as_base64: false 

Les données résultantes:

Hashed password: 
f57470574dbf29026821519b19539d1c2237e4315d881fa412da978af554740c6b284062a9a4af7d0295d18ebea8ef2e152cf674b283f792fe0b568a93f969cf 
Salt: 
kuc5bixg5u88s4k8ggss4osoksko0g8 

Maintenant, étant donné que les itérations sont définies sur 1, je suppose que le codage « lolwut "à SHA512 en C# me donnera le même résultat, voici ma logique:

string salt = "kuc5bixg5u88s4k8ggss4osoksko0g8"; 
string input = "lolwut"; 
string passAndSalt = String.Concat(input, salt); 

System.String Hashed = System.BitConverter.ToString(((System.Security.Cryptography.SHA512)new System.Security.Cryptography.SHA512Managed()).ComputeHash(System.Text.Encoding.ASCII.GetBytes(passAndSalt))).Replace("-", ""); 
return passAndSalt + "<br>" + Hashed; 

Cependant, cela renvoie e e suivante valeur qui ne correspond pas au mot de passe FOSUserBundle haché du tout:

82E8CA0408B23DB50EB654EDB50A7926AC73613184054DB82FB6D67CD4186B7A045D265AEDE6E3852CD85B981F15F6615C1C0C6FBF443B1672DF59DE23557BD9 

Je sais que je dois faire quelque chose de mal quelque part, mais je ne peux pas pour la vie de me comprendre ce qu'elle est, et il est me rend fou. Quelqu'un pourrait-il m'aider ici, s'il vous plaît?

+0

Je pense que C# est base 64 codant pour le mot de passe, mais je peux me tromper – JamesHalsall

+1

Pourquoi êtes-vous pleinement admissible tout vos noms de types? Cela rend le code beaucoup plus difficile à lire - tout comme le fait de tout mettre dans une seule instruction ... –

+0

@JonSkeet C'est parce que ce n'est pas mon propre code, je l'ai copié à partir d'un exemple pour vérifier s'il fonctionne réellement. Vous avez raison cependant, il est illisible et sera nettoyé une fois que j'ai ce problème trié. :) – thomastuts

Répondre

3

Symfony fusionne mot de passe et sel password{salt}, de sorte que ce code renvoie le même hachage:

string salt = "kuc5bixg5u88s4k8ggss4osoksko0g8"; 
    string input = "lolwut"; 
    string passAndSalt = String.Format("{0}{{{1}}}", input, salt); 

    System.String Hashed = System.BitConverter.ToString(((System.Security.Cryptography.SHA512)new System.Security.Cryptography.SHA512Managed()).ComputeHash(System.Text.Encoding.ASCII.GetBytes(passAndSalt))).Replace("-", ""); 
    // Hashed.ToLower() 
+0

Merci beaucoup, cela a fait l'affaire! C# l'a renvoyé comme une chaîne majuscule, donc j'ai 'renvoyé Hashed.ToLower()' pour les faire correspondre parfaitement. – thomastuts

Questions connexes