直接调用ASPNETDB数据库中(aspnet_Membership_SetPassword)存储过程来修改 用户密码
2009-09-30 18:33
459 查看
//来自:http://niunan.javaeye.com/blog/459172
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);
}
}
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);
}
}
相关文章推荐
- 直接在WSS/SPS上修改用户密码
- oracle数据库在sys下直接修改用户密码
- Linux下自动修改用户密码的方法(直接通过命令而不是在终端输入密码)
- SQL大全(查询分析器快捷鍵,Sysproperties系统表,syscolumns系统表,union,表结构修改,临时表,加一个自动增长列,函数,游标,关联其它表修改,直接调用存储过程,T远程连接专用sql)
- Membership修改用户密码
- Windows XP 如何修改实现不输入用户密码而直接登录系统
- 修改解压版直接使用的mysql的用户密码
- 配置Samba支持用户Web直接修改自己的登录密码
- C#修改AD域的用户密码时报“调用的目标发生了异常”的问题。
- 配置Samba支持用户Web直接修改自己的登录密码
- 一个简单的用户修改密码存储过程
- MemberShip修改其它用户密码的方法(ChangePassword)--zt
- 使用存储过程修改sql server 2005 用户密码
- 修改AspNetSqlMembershipProvider的密码规则
- Weblogic:Java调用Weblogic API创建用户和修改密码
- 不加入域直接修改域用户密码
- WEb 修改AD域用户密码最简单直接的方法
- SSH密匙登录Linux,WinSCP教程,修改Linux用户密码
- Mysql用户密码设置修改和权限分配
- 在Windows Server 2008 R2中使用web方式修改域用户账户密码