强力重置ASP.NET membership加密后的密码![转]
公司网站的用户管理采用的是ASP.NET内置的membership管理,在web.config文件中的密码格式配置是加密了的,passwordFormat="Hashed",这样在用户注册的时候存到数据库中的密码都是加密了的,如果你忘记密码了要找回密码的时候必须要记得注册时写的密码问题答案,可是如果密码问题答案也忘记的话。。。因为密码是加了密的,所以也不知道他的密码的生成规律,直接改数据库也不懂怎么改。。。
这个问题在以前的时候碰到过,当时特意上网搜索了一下,竟然没有发现,不知道是不是我的关键字输入错误还是怎么的,今天上台湾的论坛逛成人版块的时候发现论坛中的编辑版块有篇文章是教你怎么样在不记得密码,利用了membership其中的一个存储过程,废话少说,亮code:
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Web;
- using System.Web.UI;
- using System.Web.UI.WebControls;
- using System.Web.Configuration;
- using System.Data.SqlClient;
- using System.Web.Security;
- using System.Data;
- public partial class ResetPassword : System.Web.UI.Page
- {
- protected void Page_Load(object sender, EventArgs e)
- {
- }
- // 重置
- protected void btnReset_Click(object sender, EventArgs e)
- {
- string connStr = WebConfigurationManager.ConnectionStrings["conn"].ToString();
- string username = txtUserName.Text.Trim();
- if (username.Length==0)
- {
- Response.Write("请输入用户名!");
- return;
- }
- //=== 产生加密用的密码密钥 ===
- string salt = GenerateSalt();
- //=== 将明码密码加密(此时密码为"P@ssw0rd" 当然也可随机数生成) ===
- string password = EncryptToHashString("123456", salt, "SHA1");
- SqlConnection conn = new SqlConnection(connStr);
- conn.Open();
- //=== 在此我们呼叫 Membership 提供者 数据库里的预存程序来重置密码 ===
- SqlCommand cmd = new SqlCommand("aspnet_Membership_SetPassword", conn);
- cmd.CommandType = CommandType.StoredProcedure;
- //=== 目前使用 Membership 提供者的 web 应用程序名称 ===
- cmd.Parameters.Add(new SqlParameter("@ApplicationName", Membership.ApplicationName));
- //=== 要重置密码的用户账号 ===
- cmd.Parameters.Add(new SqlParameter("@UserName", username));
- //=== 加密过的密码 ===
- cmd.Parameters.Add(new SqlParameter("@NewPassword", password));
- //=== 密码加密密钥(一定和使用加密密码的密钥一样,不要再重新产生) ===
- cmd.Parameters.Add(new SqlParameter("@PasswordSalt", salt));
- //=== 重置密码的时间 ===
- cmd.Parameters.Add(new SqlParameter("@CurrentTimeUtc", DateTime.Now));
- //=== 密码加密的格式(此时是Hash1,注意传入参数是int型态。) ===
- cmd.Parameters.Add(new SqlParameter("@PasswordFormat", Membership.Provider.PasswordFormat.GetHashCode()));
- //=== 宣告一个可以接收回传值得参数 ===
- SqlParameter returnValue = new SqlParameter();
- returnValue.ParameterName = "returnValue";
- returnValue.Direction = ParameterDirection.ReturnValue;
- cmd.Parameters.Add(returnValue);
- //=== 执行预存程序 ===
- cmd.ExecuteNonQuery();
- conn.Close();
- //=== 检查重置密码是否成功 ===
- if (returnValue.Value.ToString() == "0")
- Response.Write("重置密码成功!!");
- else
- Response.Write("重置密码失败!!");
- }
- /// <summary>
- /// 密码加密钥
- /// </summary>
- /// <returns></returns>
- public string GenerateSalt()
- {
- byte[] data = new byte[0x10];
- new System.Security.Cryptography.RNGCryptoServiceProvider().GetBytes(data);
- return Convert.ToBase64String(data);
- }
- /// <summary>
- /// 哈希密码加密(不可还原)
- /// </summary>
- /// <param name="s">原始字符串</param>
- /// <param name="saltKey">Salt加密字符串</param>
- /// <param name="hashName">加密格式(MD5, SHA1, SHA256, SHA384, SHA512.)</param>
- /// <returns>加密过的密码</returns>
- public string EncryptToHashString(string s, string saltKey, string hashName)
- {
- byte[] src = System.Text.Encoding.Unicode.GetBytes(s);
- byte[] saltbuf = Convert.FromBase64String(saltKey);
- byte[] dst = new byte[saltbuf.Length + src.Length];
- byte[] inArray = null;
- System.Buffer.BlockCopy(saltbuf, 0, dst, 0, saltbuf.Length);
- System.Buffer.BlockCopy(src, 0, dst, saltbuf.Length, src.Length);
- System.Security.Cryptography.HashAlgorithm algorithm = System.Security.Cryptography.HashAlgorithm.Create(hashName);
- inArray = algorithm.ComputeHash(dst);
- return Convert.ToBase64String(inArray);
- }
- }
这样就把密码重置为123456了
刚刚在做membership的测试的时修实然想到,数据表aspnet_Membership中的Password字段是存储密码的,FormatPassword字段是表示密码的存储格式的,0是明码,1是加密过的,假如我在数据库中把已经加密了的密码的FormatPassword改为0,然后Password改成123456, 测试,哈哈,竟然也能登陆了!!!
强力重置ASP.NET membership加密后的密码![转]的更多相关文章
- 电信级的RSA加密后的密码的破解方法
一直以来,电信通过HTTP劫持推送广告的方式已经存在了很多年了,这种手段至今并未停止.这种手段月光博客曾经有多次曝光,见<电信级的网络弹出广告>.<获取了电信恶意弹出广告的罪证> ...
- Excel文件加密后忘记密码破解方法
最好使用VBA 工程密码破解方法 新建一个excel文档,然后打开,同时按Alt和F11,进入VBA界面 点击菜单上的插入,模块 在新的窗口粘贴以下代码: Sub crack() Dim i As L ...
- Web安全--使用Salt + Hash将密码加密后再存储进数据库
转载原地址 http://www.bozhiyue.com/mianshiti/_net/2016/0728/314239.html (一) 为什么要用哈希函数来加密密码 如果你需要保存密码(比如网站 ...
- ASP.NET常用加密解密方法
ASP.NET常用加密解密方法 一.MD5加密解密 1.加密 C# 代码 public static string ToMd5(string clearString) ...
- ASP原码加密工具介绍
ASP原码加密工具介绍 总是会有非常多方法暴露ASP的原程序.造成数据库的password 路径都能够轻易被其它人搞到,所以对ASP程序实行加密处理是个不错的解决方法.以下来介绍一个工具假设大家感兴趣 ...
- md5加密后不能解密
MD5加密原理是散列算法,散列算法也称哈希算法.计算机专业学的数据结构就有哈希表这一知识点.比如10除以3余数为一,4除以3余数也为一,但余数为一的就不知道这个数是哪个了.所以md5不能解密.就算是设 ...
- 【转】asp.net(c#)加密解密算法之sha1、md5、des、aes实现源码详解
原文地址:http://docode.top/Article/Detail/10003 目录: 1..Net(C#)平台下Des加密解密源代码 2..Net(C#)平台下Aes加密解密源代码 3..N ...
- Java_I/O输入输出_使用输入输出流读取文件,将一段文字加密后存入文件,然后读取,将加密前与后的文件输出
import java.io.*; public class Example { public static void main(String[] args) { char a[] = "今 ...
- Code笔记之:对使用zend加密后的php文件进行解密
对使用zend加密后的php文件进行解密 使用zend加密后的php文件用notpad++打开会出现类似的乱码 下面使用解密工具进行解密 http://pan.baidu.com/s/1i3n4ysX ...
随机推荐
- Python基础 第一天
编码 #coding=utf-8 函数入口 if __name__== "__main__": 内置方法 type:a=1 type(a) help:import time hel ...
- asp.net mvc razor html encoding
HTML Encoding 为了跨站点的脚本攻击,Razor 语法会直接将脚本代码编码输出. @{string message = "<script>alert('haacked ...
- spyder常用快捷键
Ctrl + 1: 注释/反注释 Ctrl + 4/5: 块注释/块反注释 Ctrl + L: 跳转到行号 Tab/Shift + Tab: 代码缩进/反缩进 Ctrl +I:显示帮助
- 第二十一章 数据访问(In .net4.5) 之 序列化
1. 概述 应用程序间传递数据,需要先将数据对象转化为字符流或字节流的形式,然后接收端收到后再转化回原始的数据对象.这就是序列化与反序列化. 本章介绍 .net中的序列化与反序列化.序列化器的种类 以 ...
- Android触摸屏配置调试
前几天搞乐蛙时,进入后是鼠标模式,好坑爹的模式有木有~~ 但是大蛋给出了解决方法,我不怕不怕啦~让我们向大牛致敬!!! 首先输入Command查看你的input配置~ adb shell dumpsy ...
- Kettle行列转换
Kettle在控件中拥有行列转换功能,但是行列转换貌似是弄反了. 一.行转列 1.数据库脚本 create TABLE StudentInfo ( studentno int, subject ), ...
- 掌握这两个技术点,你可以玩转AppCan前端开发
“AppCan的前端开发其实非常简单,只要掌握两方面的技术即可.一方面是会使用栅格布局完成UI的界面排版,另外一方面就是使用AppCan MVVM模型来完成整个页面构造和用户操作逻辑.” 在2016A ...
- 使用angular封装echarts
Echarts是一个开源的图表组件,图表比较丰富,工作中需要用到它来搭建一个数据展示系统.但是系统原有的框架是基于angular的,而echarts是基于原生js的,如果直接使用的话就丢失了angul ...
- 如何配置DNS服务器(局域网——域名指向某个IP地址)
单击“开始”,指向“管理工具”,然后单击“DNS”,打开 DNS 管理器. 如有必要,向管理单元添加适用的服务器,然后连接该服务器.在控制台树中,单击适用的 DNS 服务器. 在“操作”菜单上 ...
- 服务器 IIS 发布网站 支持下载 apk 和 ipa
方法/步骤 1 打开IIS服务管理器,找到服务器,右键-属性,打开IIS服务属性: 2 单击MIME类型下的"MIME类型"按钮,打开MIME类型设置窗口: 3 单击" ...