是否存在可以使用舊密鑰解密,然後使用新密鑰爲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. 密鑰庫更改密碼
- 2. 密碼/密鑰保護
- 3. 在密碼更改後,舊密碼仍然工作在asp.net成員身份
- 4. ASP.NET會員密碼到期
- 5. 如何進入無密碼保護的Java密鑰庫或更改密碼?
- 6. ASP.NET會員API強制密碼更改
- 7. 根據密鑰每天更改密碼
- 8. 更改android簽名密鑰密碼
- 9. Python + GPG(編輯密鑰更改密碼)
- 10. 如何在asp.net成員資格中手動更改密碼?
- 11. 如何更改舊密碼檢查成員的密碼
- 12. C#密碼生成密鑰
- 13. 如何?在ASP.NET中加密和解密用戶成員密碼
- 14. 會員更改密碼
- 15. ASP.NET成員資格配置工具 - 更改密碼?
- 16. ASP.NET成員身份更改密碼不起作用
- 17. PyCrypto:生成受DES3密碼保護的RSA密鑰
- 18. ASP.NET會員密碼?
- 19. Ad Asp.Net更改密碼
- 20. Gson更改密鑰
- 21. 解密來自ASP.NET 2.0的'加密'密碼成員
- 22. asp.net會員在不知道舊密碼的情況下更改密碼
- 23. OpenSSL編成密碼隨機密鑰和IV-存放在DB
- 24. 如何在ASP.Net MVC中更改密碼選項期間禁用瀏覽器中顯示的舊密碼?
- 25. 波雷費密碼隨機密鑰(C#)
- 26. 隨機密鑰生成
- 27. 保護SSH密鑰
- 28. 無法解密密碼保護pkcs8密鑰
- 29. ASP.NET成員變更密碼控制 - 需要檢查以前的密碼
- 30. 在檢索當前密碼時更改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