加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – 创建密码和密码

发布时间:2020-12-16 07:36:02 所属栏目:asp.Net 来源:网络整理
导读:我有一个包含100个用户和密码的现有表.数据类型是varchar. 我刚刚创建了一个asp.net mvc应用程序,我想将密码转换为aspnet_membership表. 如何在SQL级别上将varchar密码转换为aspnet_membership表中的“Password”和“Passwordsalt”? 解决方法 密码 Passwor
我有一个包含100个用户和密码的现有表.数据类型是varchar.
我刚刚创建了一个asp.net mvc应用程序,我想将密码转换为aspnet_membership表.

如何在SQL级别上将varchar密码转换为aspnet_membership表中的“Password”和“Passwordsalt”?

解决方法

密码& PasswordSalt部件未在“SQL级别”处理和创建
如果仔细查看asp.net成员资格数据库 – 表/存储过程/其他对象.然后你会发现有两个存储过程(简称sp)在asp.net成员数据库表中创建User.

> aspnet_Membership_CreateUser
> aspnet_Users_CreateUser

这些sps将在aspnet_Membership& aspnet_Users表分别.
ASP.Net成员身份适用于您设置的web.config文件设置.
一个示例默认的webconfig条目将是这样的:

????
??

<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>

在此设置部分中,属性“passwordFormat”设置用户密码的存储方式.
选项包括 – 清除(0),散列(1),加密(2)

默认情况下,它将具有散列值 – 或者如果您未指定passwordFormat.

在明文中,密码将保存为 – 文本清晰 – 可读.

使用Hashed选项,密码不会(加密),只能使用Hashing算法进行编码

使用“加密”选项,密码将被加密,然后进行编码.

加密选项u指定非自动生成的“机器密钥”
得到一个:Get a non-autogenerated machine key

密码盐是一个随机生成的字符串,用于加密和编码密码以及验证和密码.解密密钥.

如果你想覆盖asp.net会员提供者的加密方法并编码自己,(如果使用的是自定义会员提供者),你可以这样做:

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,byteRESULT,byteSALT.Length);
        System.Buffer.BlockCopy(bytePASS,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)));
        }
    }
}

用法示例:

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

我希望这有帮助.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读