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

  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. //=== 将明码密码加密(此时密码为"P@ssw0rd" 当然也可随机数生成) ===
  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加密后的密码![转]的更多相关文章

  1. 电信级的RSA加密后的密码的破解方法

    一直以来,电信通过HTTP劫持推送广告的方式已经存在了很多年了,这种手段至今并未停止.这种手段月光博客曾经有多次曝光,见<电信级的网络弹出广告>.<获取了电信恶意弹出广告的罪证> ...

  2. Excel文件加密后忘记密码破解方法

    最好使用VBA 工程密码破解方法 新建一个excel文档,然后打开,同时按Alt和F11,进入VBA界面 点击菜单上的插入,模块 在新的窗口粘贴以下代码: Sub crack() Dim i As L ...

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

    转载原地址 http://www.bozhiyue.com/mianshiti/_net/2016/0728/314239.html (一) 为什么要用哈希函数来加密密码 如果你需要保存密码(比如网站 ...

  4. ASP.NET常用加密解密方法

    ASP.NET常用加密解密方法 一.MD5加密解密 1.加密 C# 代码           public static string ToMd5(string clearString)        ...

  5. ASP原码加密工具介绍

    ASP原码加密工具介绍 总是会有非常多方法暴露ASP的原程序.造成数据库的password 路径都能够轻易被其它人搞到,所以对ASP程序实行加密处理是个不错的解决方法.以下来介绍一个工具假设大家感兴趣 ...

  6. md5加密后不能解密

    MD5加密原理是散列算法,散列算法也称哈希算法.计算机专业学的数据结构就有哈希表这一知识点.比如10除以3余数为一,4除以3余数也为一,但余数为一的就不知道这个数是哪个了.所以md5不能解密.就算是设 ...

  7. 【转】asp.net(c#)加密解密算法之sha1、md5、des、aes实现源码详解

    原文地址:http://docode.top/Article/Detail/10003 目录: 1..Net(C#)平台下Des加密解密源代码 2..Net(C#)平台下Aes加密解密源代码 3..N ...

  8. Java_I/O输入输出_使用输入输出流读取文件,将一段文字加密后存入文件,然后读取,将加密前与后的文件输出

    import java.io.*; public class Example { public static void main(String[] args) { char a[] = "今 ...

  9. Code笔记之:对使用zend加密后的php文件进行解密

    对使用zend加密后的php文件进行解密 使用zend加密后的php文件用notpad++打开会出现类似的乱码 下面使用解密工具进行解密 http://pan.baidu.com/s/1i3n4ysX ...

随机推荐

  1. ASP.NET MVC4学习笔记之Controller的激活

    一. 高层相关类说明 当路由系统根据请求Url收集路由信息后,下一步就要将路由信息传给Controller激活系统,Controller激活系统负责实现了IController接口的Controlle ...

  2. C# 平时碰见的问题【5】

    vs按F5启动调试,项目不会编译的解决办法 工具 -> 选项 -> 项目和解决方案 -> 运行时, 当项目过期(下拉框) -> 不要选[从不生成] 附英文版的:

  3. ARM时钟初始化

    2440: S3C2440可以使用外部晶振(XTIpll)(默认为12MHZ)和外部时钟(EXTCLK)两种方式输入时钟信号.它由跳线OM[3:2]决定.S3C2440 默认的工作主频为12MHz(晶 ...

  4. USB协议分析

    一.USB设备描述结构 1.逻辑组织结构 在USB设备的逻辑组织中,包含设备.配置.接口和端点4个层次.设备通常有一个或多个配置,配置通常有一个或多个接口,接口有零或多个端点. 每个USB设备都可以包 ...

  5. openstack做镜像

    virt-install --virt-type kvm --name windows2008 --ram 1024 --cdrom /opt/windows-2008-x86_64.iso --di ...

  6. 包装类(Wrapper Class)

    1)包装类.针对于原生数据类型的包装.所有的包装类(8个)对位于java.lang包下.java中的8个包装类分别是:Byte,Short,Integer,Long,Float.Double,Char ...

  7. 统计工具之QQ图

    正态 QQ 图和普通 QQ 图 分位数-分位数 (QQ) 图是两种分布的分位数相对彼此进行绘制的图.评估数据集是否正态分布,并分别研究两个数据集是否具有相似的分布. 如何构建正态 QQ 图 首先,数据 ...

  8. expdp与impdp

    参考http://blog.csdn.net/hello985/article/details/13295305 (一)        导出scott用户下的emp表到xx用户下 1.1      创 ...

  9. 机器学习相关——协同过滤

    在现今的推荐技术和算法中,最被大家广泛认可和采用的就是基于协同过滤的推荐方法.本文将带你深入了解协同过滤的秘密.下面直接进入正题 1 什么是协同过滤 协同过滤是利用集体智慧的一个典型方法.要理解什么是 ...

  10. 6.24 AppCan移动开发者大会,我爱我家即将闪亮登场!

    6.24 AppCan移动开发者大会进入倒计时,报名通道即将关闭! “6月24日, 2016AppCan移动开发者大会即将召开,以“平台之上,应用无限”为主题,1500位行业精英汇聚在此,重磅新品发布 ...