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

简介: 公司网站的用户管理采用的是ASP.NET内置的membership管理,在web.config文件中的密码格式配置是加密了的,passwordFormat="Hashed",这样在用户注册的时候存到数据库中的密码都是加密了的,如果你忘记密码了要找回密码的时候必须要记得注册时写的密码问题答案,可是如果密码问题答案也忘记的话。
公司网站的用户管理采用的是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, 测试,哈哈,竟然也能登陆了!!!
差点忘记传源码了:/Files/niunan/membership测试_new.7z
气人。。。传个文件传了三次,①同名了 ②有特殊字符 ③成功
人性化做得还是不好啊。。。只希望能够帮我保存好数据,不知道JAVAEYE上我的那些文章还有没有。。。最近都上不去。。。
目录
相关文章
|
9月前
|
存储 数据安全/隐私保护
.NET Core 究竟隐藏着怎样的神秘力量,能实现强身份验证与数据加密?
【8月更文挑战第28天】在数字化时代,数据安全与身份验证至关重要。.NET Core 提供了强大的工具,如 Identity 框架,帮助我们构建高效且可靠的身份验证系统,并支持高度定制化的用户模型和认证逻辑。此外,通过 `System.Security.Cryptography` 命名空间,.NET Core 还提供了丰富的加密算法和工具,确保数据传输和存储过程中的安全性。以下是一个简单的示例,展示如何使用 .NET Core 的 Identity 框架实现用户注册和登录功能。
72 3
|
11月前
|
Java C# 数据安全/隐私保护
|
C# 数据安全/隐私保护
一款实用的.NET Core加密解密工具类库
一款实用的.NET Core加密解密工具类库
117 1
|
算法 网络安全 C#
一个基于.Net开发齐全的加密库
一个基于.Net开发齐全的加密库
175 0
|
开发框架 .NET 网络安全
虚拟主机ASP.NET 使用SSL加密465端口发邮件demo
虚拟主机ASP.NET 使用SSL加密465端口发邮件demo
|
开发框架 .NET 数据安全/隐私保护
视频点播HLS 标准加密实现 .net解密服务器搭建说明
解密服务器搭建成功了,但是访问之后出现解密失败或者无法访问加密的m3u8,可以从如下几点确认可能的原因。
视频点播HLS 标准加密实现 .net解密服务器搭建说明
|
.NET 数据库连接 数据库
ASP.NET加密和解密数据库连接字符串
大家知道,在应用程序中进行数据库操作需要连接字符串,而如果没有连接字符串,我们就无法在应用程序中完成检索数据,创建数据等一系列的数据库操作。当有人想要获取你程序中的数据库信息,他首先看到的可能会是Web.Config文件。
1305 0
|
Web App开发 算法 .NET
asp.net 加密类
MD5相关类: System.Security.Cryptography.MD5System.Security.Cryptography.MD5CryptoServiceProvider()System.
1034 0
|
3月前
|
云安全 安全 数据建模
《数字证书:互联网世界的"身份证"与"防盗门"》 ——揭秘网络安全背后的加密江湖
在2023年某深夜,上海陆家嘴金融公司机房遭遇黑客攻击,神秘青铜大门与九大掌门封印的玉牌突现,阻止了入侵。此门象征数字证书,保障网络安全。数字证书如验钞机识别假币,保护用户数据。它通过SSL/TLS加密、CA认证和非对称加密,构建安全通信。证书分为DV、OV、EV三类,分别适合不同场景。忽视证书安全可能导致巨额损失。阿里云提供一站式证书服务,助力企业部署SSL证书,迎接未来量子计算和物联网挑战。
|
5月前
|
安全 算法 网络协议
【网络原理】——图解HTTPS如何加密(通俗简单易懂)
HTTPS加密过程,明文,密文,密钥,对称加密,非对称加密,公钥和私钥,证书加密