c#程序中对密码进行加密的方法

在ADO.NET中,向数据库添加数据时,怎样对数据中的密码进行加密?(也就是说在数据表中也看不到用户的密

码,只是一些经过编译后的字符串,以防止数据库管理员利用用户的密码进行非法操作。)

首先,在c#WinForm程序中引入命名空间,"using System.Web.Security;",此命名空间是专门用来对程序进

行安全设置的;

其次,定义一个string类型的变量,用来接收用输入的密码;

string passWord = this.textBox1.Text.Trim();

取到密码之后,接下来便是对密码进行加密处理:

string pwd = FormsAuthentication.HashPasswordForStoringInConfigFile(pwd, "md5");

最后,将加密后的密码pwd添加到数据库中去。

insert into userInfo(uName,pwd) values('{0}','{1}');select @@identity", this.txtUID.Text.Trim

(),passwrod);

示例代码:

using System.Web.Security;

//取得文本框中的密码

string pwd = this.txtPwd1.Text.Trim();

//对密码加密

string passwrod = FormsAuthentication.HashPasswordForStoringInConfigFile(pwd, "md5");

//创建SQL语句,将加密后的密码保存到数据库中

string insCmd =

string.Format("insert into userInfo(uName,pwd) values('{0}','{1}');select @@identity",

this.txtUID.Text.Trim(),passwrod);

using (SqlCommand cmd = new SqlCommand(insCmd, Form1.Connection))

{

int uid = Convert.ToInt32(cmd.ExecuteScalar());

//int uid = int.Parse(cmd.ExecuteScalar());//error

if (uid > 0)

{

string mess = string.Format("恭喜,注册成功!您的号码是{0}",uid);

MessageBox.Show(mess);

}

else

{

MessageBox.Show("对不起,注册失败了!");

}

}

这样加密之后保证了用户密码的安全,但是又出现了一个问题,即用户登录时怎样对密码进行验证,该不会让

用户去记住加密后的那一长串字符串吧? 答案当然是否定的,那怎样解决呢?

应该这样解决:

在用户登录时,得到用户输入的密码;

然后,将取到的密码再次进行加密;

之后,根据用户名取出该用户在数据库中的真实密码;

最后,将刚刚进行加密的密码与数据库密码进行比对,即可完成用户登录操作。

示例代码:

string pwd = this.txtPwd1.Text.Trim();

string pwd1 = FormsAuthentication.HashPasswordForStoringInConfigFile(pwd, "md5");

string uid = this.txtUID.Text.Trim();

string selCmd = string.Format("select pwd from userINfo where uName='{0}'", uid);

string password = "";

using (SqlCommand cmd = new SqlCommand(selCmd, Form1.Connection))

{

password= cmd.ExecuteScalar().ToString();

}

if (password == pwd1)

{

MessageBox.Show("登录成功");

}

else

{

MessageBox.Show("密码错误!");

}

完整实例(复制即可用):

1.数据库代码:

use tempdb

go

if exists (select * from sysobjects where name = 'UserInfo')

drop table UserInfo

go

create table UserInfo

(

uId int identity(1,1) not null,

uName nvarchar(20) not null,

uAge int not null,

password nvarchar(200) not null

)

go

alter table UserInfo

add constraint PK_uID primary key (uId)

alter table UserInfo

add constraint CK_uAge check (uAge between 0 and 100)

go

select * from UserInfo

2.c#代码

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Data.SqlClient;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using System.Web.Security; //安全加密

namespace 密码加密示例

{

public partial class Form1 : Form

{

//创建数据库连接字符串

static readonly string strConn = "Data Source=.;Initial Catalog=tempdb;Integrated Security=True";

//创建数据库连接对象

static SqlConnection connection = null;

//属性

public static SqlConnection Connection

{

get

{

if (connection == null || connection.State != ConnectionState.Open)

{

connection = new SqlConnection(strConn); //连接数据库

connection.Open(); //打开数据库

}

return Form1.connection; //返回一个连接

}

}

public Form1()

{

InitializeComponent();

}

/// <summary>

/// 检查用户输入

/// </summary>

/// <returns></returns>

private bool CheckInput()

{

if (string.IsNullOrEmpty(this.txtName.Text))

{

this.errorPro.SetError(this.txtName, "用户名不能为空!");

this.txtName.Focus();

return false;

}

else

{

this.errorPro.Dispose(); //终止提示错误

}

if (string.IsNullOrEmpty(this.txtAge.Text))

{

this.errorPro.SetError(this.txtAge, "姓名不能为空!");

this.txtAge.Focus();

return false;

}

else

{

this.errorPro.Dispose();

}

if (string.IsNullOrEmpty(this.txtPass.Text))

{

this.errorPro.SetError(this.txtPass, "密码不能为空!");

}

else

{

this.errorPro.Dispose();

}

return true;

}

/// <summary>

/// 添加数据

/// </summary>

/// <param name="sender"></param>

/// <param name="e"></param>

private void btnAdd_Click(object sender, EventArgs e)

{

if (this.CheckInput())

{

//获取用户输入的密码

string password = this.txtPass.Text.Trim();

//对密码进行加密

string pwd = FormsAuthentication.HashPasswordForStoringInConfigFile(password, "md5");

//创建SQL语句,将加密后的密码保存到数据库

string insCmd = string.Format("insert into UserInfo values ('{0}','{1}','{2}')",

this.txtName.Text.Trim(), this.txtAge.Text.Trim(),pwd);

using (SqlCommand cmd = new SqlCommand(insCmd,Form1.Connection))

{

if (cmd.ExecuteNonQuery() > 0)

{

MessageBox.Show("恭喜您,注册成功!");

}

else

{

MessageBox.Show("对不起,注册失败···");

}

}

}

}

}

}

完!