我发现将现有数据库从加密密码转换为已解密密码的令人惊讶的信息. (我能够找到更多关于转换其他方式的信息,但没有太多的帮助.)
大多数人都知道,更改web.config中的密码格式设置只会影响新用户.我有一个有数百个用户的数据库,我想将它们转换为使用散列密码,而不用更改现有的密码.
其他人是否熟悉如何处理这个问题?感谢任何提示.
解决方法
这是我开始看看我有多远的方法:
>在我的web.config中创建两个MembershipProviders,一个用于加密密码,一个用于散列.
>循环使用加密密码提供程序的所有用户. (SqlMembershipProvider.GetAllUsers)
>使用加密密码提供程序获取用户密码. (MembershipUser.GetPassword)
>使用散列密码提供程序将用户密码更改为相同的密码. (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()); }