强力重置ASP.NET membership加密后的密码![转]

公司网站的用户管理采用的是ASP.NET内置的membership管理,在web.config文件中的密码格式配置是加密了的,passwordFormat="Hashed",这样在用户注册的时候存到数据库中的密码都是加密了的,如果你忘记密码了要找回密码的时候必须要记得注册时写的密码问题答案,可是如果密码问题答案也忘记的话。。。因为密码是加了密的,所以也不知道他的密码的生成规律,直接改数据库也不懂怎么改。。。 
这个问题在以前的时候碰到过,当时特意上网搜索了一下,竟然没有发现,不知道是不是我的关键字输入错误还是怎么的,今天上台湾的论坛逛成人版块的时候发现论坛中的编辑版块有篇文章是教你怎么样在不记得密码,利用了membership其中的一个存储过程,废话少说,亮code:

C#代码  

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using System.Web.UI;
  6. using System.Web.UI.WebControls;
  7. using System.Web.Configuration;
  8. using System.Data.SqlClient;
  9. using System.Web.Security;
  10. using System.Data;
  11. public partial class ResetPassword : System.Web.UI.Page
  12. {
  13. protected void Page_Load(object sender, EventArgs e)
  14. {
  15. }
  16. // 重置
  17. protected void btnReset_Click(object sender, EventArgs e)
  18. {
  19. string connStr = WebConfigurationManager.ConnectionStrings["conn"].ToString();
  20. string username = txtUserName.Text.Trim();
  21. if (username.Length==0)
  22. {
  23. Response.Write("请输入用户名!");
  24. return;
  25. }
  26. //=== 产生加密用的密码密钥 ===
  27. string salt = GenerateSalt();
  28. //=== 将明码密码加密(此时密码为"[email protected]" 当然也可随机数生成) ===
  29. string password = EncryptToHashString("123456", salt, "SHA1");
  30. SqlConnection conn = new SqlConnection(connStr);
  31. conn.Open();
  32. //=== 在此我们呼叫 Membership 提供者 数据库里的预存程序来重置密码 ===
  33. SqlCommand cmd = new SqlCommand("aspnet_Membership_SetPassword", conn);
  34. cmd.CommandType = CommandType.StoredProcedure;
  35. //=== 目前使用 Membership 提供者的 web 应用程序名称 ===
  36. cmd.Parameters.Add(new SqlParameter("@ApplicationName", Membership.ApplicationName));
  37. //=== 要重置密码的用户账号 ===
  38. cmd.Parameters.Add(new SqlParameter("@UserName", username));
  39. //=== 加密过的密码 ===
  40. cmd.Parameters.Add(new SqlParameter("@NewPassword", password));
  41. //=== 密码加密密钥(一定和使用加密密码的密钥一样,不要再重新产生) ===
  42. cmd.Parameters.Add(new SqlParameter("@PasswordSalt", salt));
  43. //=== 重置密码的时间 ===
  44. cmd.Parameters.Add(new SqlParameter("@CurrentTimeUtc", DateTime.Now));
  45. //=== 密码加密的格式(此时是Hash1,注意传入参数是int型态。) ===
  46. cmd.Parameters.Add(new SqlParameter("@PasswordFormat", Membership.Provider.PasswordFormat.GetHashCode()));
  47. //=== 宣告一个可以接收回传值得参数 ===
  48. SqlParameter returnValue = new SqlParameter();
  49. returnValue.ParameterName = "returnValue";
  50. returnValue.Direction = ParameterDirection.ReturnValue;
  51. cmd.Parameters.Add(returnValue);
  52. //=== 执行预存程序 ===
  53. cmd.ExecuteNonQuery();
  54. conn.Close();
  55. //=== 检查重置密码是否成功 ===
  56. if (returnValue.Value.ToString() == "0")
  57. Response.Write("重置密码成功!!");
  58. else
  59. Response.Write("重置密码失败!!");
  60. }
  61. /// <summary>
  62. /// 密码加密钥
  63. /// </summary>
  64. /// <returns></returns>
  65. public string GenerateSalt()
  66. {
  67. byte[] data = new byte[0x10];
  68. new System.Security.Cryptography.RNGCryptoServiceProvider().GetBytes(data);
  69. return Convert.ToBase64String(data);
  70. }
  71. /// <summary>
  72. /// 哈希密码加密(不可还原)
  73. /// </summary>
  74. /// <param name="s">原始字符串</param>
  75. /// <param name="saltKey">Salt加密字符串</param>
  76. /// <param name="hashName">加密格式(MD5, SHA1, SHA256, SHA384, SHA512.)</param>
  77. /// <returns>加密过的密码</returns>
  78. public string EncryptToHashString(string s, string saltKey, string hashName)
  79. {
  80. byte[] src = System.Text.Encoding.Unicode.GetBytes(s);
  81. byte[] saltbuf = Convert.FromBase64String(saltKey);
  82. byte[] dst = new byte[saltbuf.Length + src.Length];
  83. byte[] inArray = null;
  84. System.Buffer.BlockCopy(saltbuf, 0, dst, 0, saltbuf.Length);
  85. System.Buffer.BlockCopy(src, 0, dst, saltbuf.Length, src.Length);
  86. System.Security.Cryptography.HashAlgorithm algorithm = System.Security.Cryptography.HashAlgorithm.Create(hashName);
  87. inArray = algorithm.ComputeHash(dst);
  88. return Convert.ToBase64String(inArray);
  89. }
  90. }

这样就把密码重置为123456了 
刚刚在做membership的测试的时修实然想到,数据表aspnet_Membership中的Password字段是存储密码的,FormatPassword字段是表示密码的存储格式的,0是明码,1是加密过的,假如我在数据库中把已经加密了的密码的FormatPassword改为0,然后Password改成123456, 测试,哈哈,竟然也能登陆了!!!

强力重置ASP.NET membership加密后的密码![转]

时间: 2024-11-09 15:51:00

强力重置ASP.NET membership加密后的密码![转]的相关文章

asp.net MD5加密函数(c#)

利用下面的方法,可直接输入数据,反回md5加密后的代码 /// <summary> /// 用md5加密 /// </summary> /// <param name="Sourcein">输入的数据</param> /// <returns></returns> public static string MD5(string Sourcein) {    MD5CryptoServiceProvider MD5C

Web安全--使用Salt + Hash将密码加密后再存储进数据库

转载原地址 http://www.bozhiyue.com/mianshiti/_net/2016/0728/314239.html (一) 为什么要用哈希函数来加密密码 如果你需要保存密码(比如网站用户的密码),你要考虑如何保护这些密码数据,象下面那样直接将密码写入数据库中是极不安全的,因为任何可以打开数据库的人,都将可以直接看到这些密码. 解决的办法是将密码加密后再存储进数据库,比较常用的加密方法是使用哈希函数(Hash Function).哈希函数的具体定义,大家可以在网上或者相关书籍中查

ASP.net Membership角色与权限管理(一)

ASP.net Membership角色与权限管理(一) 本文目录:1.membership简介2.membership在sql server中的设置3.配置web.config4.创建用户CreateUserWizard控件5.用户登录login控件6.显示当前用户的名称LoginName控件7.检测用户的身份验证状态的LoginStatus控件8.为不同类别用户呈现不同内容的LoginView控件9.更改密码的ChangePassword控件10.自助找回密码的PasswordRecover

ASP原码加密工具介绍

总是会有非常多方法暴露ASP的原程序.造成数据库的password 路径都能够轻易被其它人搞到,所以对ASP程序实行加密处理是个不错的解决方法.以下来介绍一个工具假设大家感兴趣能够来我主页下载. minisql.yeah.net 熏衣草乐园 脚本编码器是一种简单的命令行工具,它使脚本设计者能够对终于的脚本进行编码,从而使 Web 主机和 Web 客户不能查看或改动它们的源码.注意.这样的编码仅仅能防止别人在无意中查看到您的代码,并不能防止蓄意黑客查看您的编码内容及其方法. Web 设计者在 We

asp.net字符串加密与解密

1 using System; 2 using System.Data; 3 using System.Configuration; 4 using System.Web; 5 using System.Web.Security; 6 using System.Web.UI; 7 using System.Web.UI.WebControls; 8 using System.Web.UI.WebControls.WebParts; 9 using System.Web.UI.HtmlContro

Asp.Net使用加密cookie代替session验证用户登录状态 源码分享

首先 session 和 cache 拥有各自的优势而存在.  他们的优劣就不在这里讨论了. 本实例仅存储用户id于用户名,对于多级权限的架构,可以自行修改增加权限字段   本实例采用vs2010编写,vb和c#的代码都是经过测试的:一些童鞋说代码有问题的 注意下    什么? 你还在用vs2008 vs2005? 请自行重载 带有 optional 标致的函数   童鞋们提到的 密码修改后 要失效的问题 当时没有想到 个人认为 大致方向可以> >1. 每个用户生成1个xml 里面保存随机的几

安全加密后的文件夹怎么打开呢?

在Windows中,打开控制面板,可以进行系统设置:打开拨号网络,可以建立新连接,或进行拨号:打开打印机,可以安装打印机,并可对打印机进行设置-- 其实,我们也可以自己制造这样的文件夹.下面就跟我一起来制作吧. 对于加密后的文件夹怎么打开呢?因为我们无法把该文件夹名称中的类ID号直接删除,所以无法通过重命名把该文件夹变为普通文件夹.那么怎么办呢?我们可以用压缩软件WinRAR来解决这个问题.启动WinRAR,切换到该文件夹的上级文件夹,右键单击该文件夹,在弹出菜单中选择"重命名",去掉

ASP.NET常用加密解密方法

一.MD5加密解密 1.加密 C# 代码   复制 public static string ToMd5(string clearString) { Byte[] clearBytes = System.Text.Encoding.Unicode.GetBytes(clearString); string hashedPwd = BitConverter.ToString(((HashAlgorithm)CryptoConfig.CreateFromName("MD5")).Compu

asp.net 的加密Encode和解密Decode.

asp.net 的加密和解密(c#): 1. 导入所需包: using System.IO; using System.Text; using System.Security.Cryptography; 2.加密 1)MD5普通加密 //获取要加密的字段,并转化为Byte[]数组 byte[] data = System.Text.Encoding.Unicode .GetBytes(str.ToCharArray()); //建立加密服务 System.Security.Cryptograph