将密码格式从加密更改为散列 [英] Changing passwordFormat from Encrypted to Hashed

查看:33
本文介绍了将密码格式从加密更改为散列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我发现关于将现有数据库从加密密码转换为散列密码的信息非常少.(我能够找到更多有关以其他方式转换的信息,但没有太大帮助.)

I'm finding surprisingly little information on converting an existing database from Encrypted passwords to Hashed passwords. (I was able to find a bit more information on converting the other way, but it wasn't of much help.)

众所周知,更改 web.config 中的 passwordFormat 设置只会影响新用户.我有一个包含几百个用户的数据库,我想将它们转换为使用散列密码而不更改现有密码.

As most people know, changing the passwordFormat setting in web.config only affects new users. I have a database with a couple of hundred users and I'd like to convert them to use hashed passwords without changing those existing passwords.

有没有其他人熟悉如何处理这个问题?感谢您提供任何提示.

Is anyone else familiar with how one might approach this? Thanks for any tips.

推荐答案

这是我开始使用的方法,看看我能走多远:

This is the approach I'd start with to see how far I got:

  1. 在我的 web.config 中创建两个 MembershipProvider,一个用于加密密码,另一个用于散列.
  2. 使用加密密码提供程序遍历所有用户.(SqlMembershipProvider.GetAllUsers)
  3. 使用加密密码提供程序获取用户密码.(MembershipUser.GetPassword)
  4. 使用散列密码提供程序将用户的密码更改为相同的密码.(MembershipUser.ChangePassword)

所以它会是这样的:

    <membership defaultProvider="HashedProvider">
        <providers>
            <clear />
            <add name="HashedProvider" connectionStringName="MembershipConnectionString" enablePasswordRetrieval="false"  requiresQuestionAndAnswer="false" applicationName="MyApp" passwordFormat="Hashed"  type="System.Web.Security.SqlMembershipProvider" />
            <add name="EncryptedProvider" connectionStringName="MembershipConnectionString" enablePasswordRetrieval="true" requiresQuestionAndAnswer="false" applicationName="MyApp" passwordFormat="Encrypted" type="System.Web.Security.SqlMembershipProvider" />
        </providers>
    </membership>

代码:

SqlMembershipProvider hashedProvider = (SqlMembershipProvider)Membership.Providers["HashedProvider"];
SqlMembershipProvider encryptedProvider = (SqlMembershipProvider)Membership.Providers["EncryptedProvider"];

int unimportant;
foreach (MembershipUser user in encryptedProvider.GetAllUsers(0, Int32.MaxValue, out unimportant ))
{
    hashedProvider.ChangePassword(user.UserName, user.GetPassword(), user.GetPassword());
}

这篇关于将密码格式从加密更改为散列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆