2010-09-20 6 views
4

J'ai une table existante qui a 100 utilisateurs et mots de passe. Le type de données est un varchar. Je viens de créer une application mvc asp.net et je veux convertir le mot de passe en table aspnet_membership. Comment puis-je convertir le mot de passe varchar au niveau SQL en tant que "Password" et "Passwordsalt" dans la table aspnet_membership?Créer un mot de passe et des mots de passealtern

Répondre

17

Mot de passe & partie PasswordSalt ne sont pas traitées et créé à « niveau SQL » Si vous regardez attentivement la base de données des membres de asp.net - tables/procédures stockées/d'autres objets. Ensuite, vous trouverez qu'il existe deux procédures stockées (sp pour faire court) pour créer l'utilisateur dans les tables de base de données d'adhésion asp.net.

  1. aspnet_Membership_CreateUser
  2. aspnet_Users_CreateUser

Ces sps vont créer une entrée d'utilisateur dans aspnet_Membership & tableau aspnet_Users respectivement. L'adhésion ASP.Net fonctionne sur les paramètres du fichier web.config que vous configurez. Un exemple d'entrée par défaut webconfig sera quelque chose comme ceci:

<authentication mode="Forms"> // If you are using Form authentication 
    <forms loginUrl="~/Account/Login.aspx" timeout="2880" /> 
</authentication> 

<membership> 
    <providers> 
    <clear/> 
    <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="ApplicationServices" 
     enablePasswordRetrieval="false" passwordFormat="Encrypted" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" 
     maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" 
     applicationName="/" /> 
    </providers> 
</membership> 

Dans cette section Paramètres l'attribut "passwordFormat" définit la façon dont votre mot de passe utilisateur est stocké. Les options sont les suivantes: Clear (0), Hashed (1), Encrypted (2)

Par défaut, la valeur de hachage est définie, ou si vous n'avez pas spécifié passwordFormat. En clair, le mot de passe sera sauvegardé comme suit: - Texte clair - lisible.

Avec l'option Hashed le mot de passe ne sera pas (Encrypted), seulement encodées avec un alogorithm de hashage

Avec l'option Encrypted le mot de passe sera crypté et codé.

l'option Encrypted u spécifie un non-auto généré « clé machine » Pour obtenir un siège: Get a non-autogenerated machine key

sel de mot de passe est une chaîne aléatoire qui est utilisée pour crypter et encoder le mot de passe ainsi que la validation & Decryption Clé.

Si vous voulez overide la méthode de cryptage du fournisseur d'appartenance asp.net et encodez youself, (si vous utilisez fournisseur d'appartenances custome), vous pouvez faire quelque chose comme ceci:

private string EncodePassword(byte passFormat, string passtext, string passwordSalt) 
{ 
    if(passFormat.Equals(0)) // passwordFormat="Clear" (0) 
     return passtext; 
    else{ 
     byte[] bytePASS = Encoding.Unicode.GetBytes(passtext); 
     byte[] byteSALT = Convert.FromBase64String(passwordSalt); 
     byte[] byteRESULT = new byte[byteSALT.Length + bytePASS.Length + 1]; 

     System.Buffer.BlockCopy(byteSALT, 0, byteRESULT, 0, byteSALT.Length); 
     System.Buffer.BlockCopy(bytePASS, 0, byteRESULT, byteSALT.Length, bytePASS.Length); 

     if(passFormat.Equals(1)) // passwordFormat="Hashed" (1) 
     { 
      HashAlgorithm ha = HashAlgorithm.Create(Membership.HashAlgorithmType); 
      return (Convert.ToBase64String(ha.ComputeHash(byteRESULT))); 
     } 
     else // passwordFormat="Encrypted" (2) 
     { 
      MyCustomMembership myObj = new MyCustomMembership(); 
      return(Convert.ToBase64String(myObj.EncryptPassword(byteRESULT))); 
     } 
    } 
} 

Exemple d'utilisation:

string passSalt = // Either generate a random salt for that user, or retrieve the salt from database if the user is in edit and has a password salt 
    EncodePassword(/* 0 or 1 or 2 */, passwordText, passSalt); 

J'espère que cela aide.

+0

Merci de réponse claire. – Hoorayo

+0

Comment asp.net génère-t-il des mots de passe lorsque j'utilise l'appartenance par défaut créer une logique créée par asp.net? Vous avez mentionné "Soit générer un sel aléatoire pour cet utilisateur ou récupérer le sel de la base de données si l'utilisateur est en édition et a un mot de passe". Je suis juste curieux de savoir quelle logique est utilisée à moins que je ne remplace la logique par défaut. – Hoorayo

+0

bien jusqu'à ma connaissance - mot de passe salt est une chaîne générée aléatoirement ... qui est utilisé avec le hashed ou crypté et hashed mot de passe. – Jsinh

0

Ce n'est pas possible au niveau SQL, mais avec un peu de code C# il y a 2 techniques possibles.

est d'écrire Simplest un processus de lire votre table existante, et appelez Membership.CreateUser pour chacun des utilisateurs, et le fournisseur d'appartenances va créer les enregistrements d'utilisateurs pour vous, y compris le sel de mot de passe &. Sinon, créez vous-même un utilisateur fictif, puis rédigez un processus pour changer le mot de passe de l'utilisateur factice en valeur de vos utilisateurs existants, et lisez la valeur de la table aspnet_membership. J'ai un code qui le fait si vous êtes intéressé.

0
HashAlgorithm ha = HashAlgorithm.Create(Membership.HashAlgorithmType); 

Comment vérifier l'ha est nulle ou non si des moyens nuls et comment lancer l'exception

Questions connexes