12
votes

Générez des éléments de passe d'adhésion ASP.NET HASH dans PURE T-SQL

Je tente de créer une représentation pure T-SQL du hachage de mot de passe SHA-1 par défaut dans le système d'adhésion ASP.NET. Idéalement, ce que j'aurais obtenu serait ceci: xxx

Remarque: c'est faux base de base-64 là-bas. J'ai des fonctions de base64_encode et de décodage qui se déplacent correctement. Voici ma tentative, qui ne fonctionne pas: xxx

J'ai essayé un certain nombre de variations sur le thème, en vain. J'ai besoin de le faire dans Pure T-SQL; Impliquer une application de console ou quelque chose comme ça doublera le travail.

Donc, si quelqu'un peut fournir quelle syntaxe doit être précisément de dupliquer ce mot de passe de l'adhésion ASP.NET, je l'apprécierais énormément. < / p>


5 commentaires

Donc, juste pour être clair; Le problème est que mot de passe et généreuxpassword ne correspond pas?


Ouais. Je ne peux pas comprendre le T-SQL précis pour reproduire le résultat du code d'adhésion .NET.


Nope ... et c'était faux quand même. Il me semble avoir du mal à m'exprimer aujourd'hui.


Pouvez-vous publier vos fonctions de codage / décodage afin que je puisse tester avec eux?


Je les ai tous deux d'ici: SQLSERVERCLANCA.COM/SCRIPTS/MISCELLANNE/31520


5 Réponses :



8
votes

Si vous exécutez 2005 ou plus, vous pouvez créer un CLR (.NET) UDF:

SELECT UserName,Password
,dbo.EncodePassword('PASSWORD', PasswordSalt) As TestPassword 
FROM aspnet_Users U 
JOIN aspnet_membership M ON U.UserID = M.UserID


3 commentaires

Ça marche parfaitement. Travail absolument exceptionnel. Merci beaucoup.


Je voulais dire cela immédiatement, mais cela a glissé mon esprit. À l'œil nu, le hachage original et généré apparaîtra de la même manière, mais le hachage généré est rembourré droit avec des espaces (pour remplir le Nvarchars (4000)). Le correctif est TRES SIMPLE: SELECT RTRIM (DBO.ENCEDEPASSWORD ('Mot de passe', Passwordsalt) ...


ma faute. (copier / coller) Essayez de remplacer la valeur de retour - au lieu de renvoie nchar (4000) Essayez retourne nvarchaar (4000) . non testé, mais devrait fonctionner.



4
votes

Au lieu d'utiliser CLR, vous pouvez créer cette fonction dans SQL. Sur cette page, vous trouverez très bien exemple:

http: // svakodnevnica. com.ba/index.php?option=com_kunena&funcC=View&catid=4&id=4&itemid=5&lang=fr#7

P.s. byte [] src = convert.frombase64string (sel); est correct de façon ...

renard


4 commentaires

J'ai pu adapter l'exemple inclus sur cette page à mes besoins assez facilement. Et pour certains, cela peut être la seule option puisque Azure ne prend pas en charge les extensions CLR.


J'ai eu ceci pour travailler avec une seule ligne de T-SQL et les deux fonctions de codage / décodage dans le poste ci-dessus. Rien d'autre n'a besoin: Sélectionnez Dbo.Adm_Base64encode (HASHBYTES ('SHA1', DBO.ADM_BASE64DECODE (N '<') + Convert (Varbinaire (Mot de passe ClearText ici ')))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))


L'URL énumérée ci-dessus n'est plus valide.


Une version du code semble être à social.msdn.microsoft.com/forums/vstudio/en-us/... Mais je ne l'ai pas encore essayé.



12
votes

4 commentaires

Désolé de répondre à l'ancien post, il supporte-t-il SHA256 (ASP.NET Identity V3)?


Il est écrit pour v1.0. Il faudrait être déplacé vers SQL 2012, qui prend en charge SHA2_256 et le format est totalement différent pour le format V3.0: {0x01, PRF (UINT32), ITER Compte (UINT32), Longueur du sel (UINT32), SELT, SUBKEY}


Pour rendre le travail ci-dessus pour le V3.0 modifier la ligne SET @passwordvarbinstr = '0x00' + remplacer (master.dbo.fn_varbintohextr (@saltvarbin) + (Sélectionnez DBO.FN_PBKDF2 ('SHA1', @PasswordSalt, @DecodeDsalt , 1000, 32)), '0x', '') à set @passwordvarbinstr = '0x0100000001000027100000000010' + Remplacer (master.dbo.fn_varbintohextr (@saltvarbin) + (Sélectionnez DBO.FN_PBKDF2 ('SHA2_256 ', @passwordin, @ décodedsalt, 10000, 32)),' 0x ',' ') et exécutez SQL 2012 ou supérieur. A travaillé à l'aide de la réponse de Michael ici stackoverflow .com / questions / 2138429 / ...


Merci Dave. Je vais l'essayer.



3
votes

OP demanda "pure" SQL - Je pense que l'utilisation de CLR est tricherie;) J'étais têtu et j'ai dû le comprendre pour moi-même, alors voici ce que j'ai fait.

Remarque: faites d'abord une sauvegarde !! p>

Update [dbo].[aspnet_Membership] set PasswordSalt = dbo.AspNetSaltCreate(newId()) where PasswordSalt = ''


1 commentaires

C'est bien! Je migre une vieille adhésion ASP.NET et je n'ai pas trouvé de moyen de tester si le code de migration que j'ai eu était correct et cela m'a aidé à le vérifier :)