是否存在可以使用舊密鑰解密,然後使用新密鑰爲ASP.Net成員身份用戶加密密碼的實用程序或代碼示例?在機器密鑰更改期間維護ASP.Net成員密碼
3
A
回答
0
我想你可以通過設置在飛行的關鍵做到這一點:
您可能需要延長SqlMembershipProvider
(或任何你使用),以獲得訪問protected DecryptPassword
方法。
MachineKeySection section = (MachineKeySection)WebConfigurationManager.GetSection("system.web/machineKey");
section.DecryptionKey = "old";
// Read old password
section.DecryptionKey = "new";
// Store new password
1
這是我最好的解決方案,但我沒有機會去測試它。它依賴於當前提供商的以下設置:
enablePasswordRetrieval="true" requiresQuestionAndAnswer="false" passwordFormat="Encrypted"
它還假定新的機器密鑰已在配置文件中。
創建下面的類(感謝mootinator查找有關此則JumpStart)
using System.Reflection;
using System.Web.Configuration;
using System.Web.Security;
namespace MyNamespace
{
public class MySqlMembershipProvider : SqlMembershipProvider
{
protected override byte[] DecryptPassword(byte[] encodedPassword)
{
MachineKeySection section = (MachineKeySection)WebConfigurationManager.GetSection("system.web/machineKey");
section.DecryptionKey = "oldkey"; // TODO: Set your old key here
MethodInfo method = typeof(MachineKeySection).GetMethod("EncryptOrDecryptData", BindingFlags.Instance | BindingFlags.NonPublic);
return (byte[])method.Invoke(section, new object[] { encodedPassword, null, 0, encodedPassword.Length, 0, false, false });
}
}
}
在你的web.config:
MembershipProvider retrievePasswordProvider = Membership.Providers["MySqlMembershipProvider"];
foreach (MembershipUser user in Membership.GetAllUsers())
{
MembershipUser retrievePassworedUser = retrievePasswordProvider.GetUser(user.UserName, false);
string password = retrievePassworedUser.GetPassword(); // get password using old key
user.ChangePassword(password, password); // change password to same password using new key
}
:
<membership defaultProvider="DefaultSqlMembershipProvider">
<providers>
<clear/>
<add name="DefaultSqlMembershipProvider" connectionStringName="MembershipConnectionString" enablePasswordRetrieval="true" requiresQuestionAndAnswer="false" applicationName="TODO" passwordFormat="Encrypted" type="System.Web.Security.SqlMembershipProvider"/>
<add name="MySqlMembershipProvider" connectionStringName="MembershipConnectionString" enablePasswordRetrieval="true" requiresQuestionAndAnswer="false" applicationName="TODO" passwordFormat="Encrypted" type="MyNamespace.MySqlMembershipProvider"/>
</providers>
</membership>
變化用下面的代碼密碼
讓我知道,如果這對你有用。
2
沒有提到的解決方法適用於我。 我的解決方案如下。它首先涉及以明文存儲密碼,然後使用新的MachineKey重新加密。
相關問題
- 1. Asp.Net成員登錄和機器密鑰
- 2. 密鑰庫更改密碼
- 3. 密碼/密鑰保護
- 4. 代碼中的ASP.NET機器密鑰設置密鑰
- 5. 在密碼更改後,舊密碼仍然工作在asp.net成員身份
- 6. ASP.NET會員密碼到期
- 7. 如何進入無密碼保護的Java密鑰庫或更改密碼?
- 8. ASP.NET會員API強制密碼更改
- 9. 更改密碼ASP.NET
- 10. 更改密鑰「完成」
- 11. 更改android簽名密鑰密碼
- 12. Python + GPG(編輯密鑰更改密碼)
- 13. 根據密鑰每天更改密碼
- 14. 在更改aspnet成員資格中的密碼格式後更改密碼
- 15. 如何在asp.net成員資格中手動更改密碼?
- 16. 如何更改舊密碼檢查成員的密碼
- 17. Twofish密碼密鑰生成
- 18. C#密碼生成密鑰
- 19. 如何?在ASP.NET中加密和解密用戶成員密碼
- 20. 無法更改Base64解碼器中的密碼密鑰
- 21. 會員更改密碼
- 22. 密碼保護在ASP.net?
- 23. ASP.NET成員身份更改密碼不起作用
- 24. ASP.NET成員資格配置工具 - 更改密碼?
- 25. ASP.NET會員密碼?
- 26. Asp.net會員密碼
- 27. cms成員上次密碼更改日期不正確?
- 28. PyCrypto:生成受DES3密碼保護的RSA密鑰
- 29. 更改ASP.NET身份密碼
- 30. Ad Asp.Net更改密碼
不錯,如果這樣做的話,它可以避免寫入到我最終做的中間位置。我會測試一下。 – ScottS 2010-11-16 20:08:34
我希望它的作品,因爲它是一個熊找出:) – Greg 2010-11-16 20:13:09
section.DecryptionKey =「oldkey」;是隻讀的,不能設置..除非有辦法覆蓋它,我最終檢索/解密首先保存到文件,然後更改密鑰和更新密碼。 – Jack0fshad0ws 2016-11-08 02:09:56