首页 新闻 会员 周边 捐助

C#里面如何对数据库里面的密码字段加密

0
悬赏园豆:10 [已解决问题] 解决于 2010-12-01 18:21

C#里面如何对数据库里面的密码字段加密?加密以后如何在在程序里面取值?希望知道的朋友帮忙详细说说,最好举个例子,感谢!!

无 影的主页 无 影 | 初学一级 | 园豆:59
提问于:2010-11-29 23:19
< >
分享
最佳答案
0
收获园豆:5
Astar | 高人七级 |园豆:40805 | 2010-11-30 06:50
Astar,你好,看了你介绍的文章,加密是没什么问题了,我是将密码通过MD5加密以后存入数据库的,那如何解密呢?
无 影 | 园豆:59 (初学一级) | 2010-11-30 18:20
@allen0118:为什么要解密呢?MD5是可以穷举破解,但是应用中不需要解密,要不然就不安全了。如果你要查找当前用户输入的密码是否正确,你加密一下去数据库里查询就可以了?这个明白吧
Astar | 园豆:40805 (高人七级) | 2010-11-30 18:39
哦, 我就是这样做的,我判断用户登录的时候再次调用加密的函数就实现了这个功能!感谢啊!
无 影 | 园豆:59 (初学一级) | 2010-12-01 18:19
其他回答(5)
0

都是使用MD5加密,推荐一篇文档给你。有很详细的加密和解密方法,还有就是C#中有自带的加密和解密方法。随便你使用哪种。

收获园豆:1
勤劳的渔网工作者 | 园豆:572 (小虾三级) | 2010-11-29 23:26
感谢大家的帮忙!
支持(0) 反对(0) 无 影 | 园豆:59 (初学一级) | 2010-12-01 18:21
0

密码用md5加密保存到数据库,然后用户登录时你把他的密码在MD5加密一次跟数据库里面的比较就行了。

收获园豆:1
茂茂 | 园豆:2902 (老鸟四级) | 2010-11-30 09:16
感谢大家的帮忙!
支持(0) 反对(0) 无 影 | 园豆:59 (初学一级) | 2010-12-01 18:21
0

方法:

   密码子段类型为binary(50)。应用System Security.Cryptography名称空间下的SHA1类的ComputeHash()方法将字符密码进行哈希散列运算转换为byte[]类型对象,保存入数据库。

实例:

//哈系散列转换
public byte[] getSaltedPassword(string password)
{
SHA1 sha1
=SHA1.Create();
//应用System.Text空间下的Unicode.GetBytes方法获得byte.
byte[] bytePassword=sha1.ComputeHash(Encoding.Unicode.GetBytes(password));
return bytePassword;
}
//数据存入,直接将byte[]保存入binary字段
public int AccountRegister(string accountName,string password,string email)
{
byte[] bytePassword = this.getSaltedPassword(password);
SqlConnection myConnection
= new SqlConnection(this.GetConnStr);
myConnection.Open();
SqlCommand myCommand
= new SqlCommand("Account_Add",myConnection);
myCommand.CommandType
=CommandType.StoredProcedure;
SqlParameter prmAccountName
=myCommand.Parameters.Add(new SqlParameter("@AccountName",SqlDbType.VarChar,50));
prmAccountName.Value
=accountName;
SqlParameter prmPassword
=myCommand.Parameters.Add(new SqlParameter("@password",SqlDbType.Binary,50));
prmPassword.Value
=bytePassword;
SqlParameter prmEmail
=myCommand.Parameters.Add(new SqlParameter("@email",SqlDbType.VarChar,50));
prmEmail.Value
=email;
int myInt=myCommand.ExecuteNonQuery();
myCommand.Dispose();
myConnection.Close();
return myInt;
}
//密码比较。将字符密码转换为哈西散列后直接与数据库binary密码字段比较
public int AccountVerify(string accountName,string password)
{
byte[] bytePassword = this.getSaltedPassword(password);
SqlConnection myConnection
= new SqlConnection(this.GetConnStr);
myConnection.Open();
SqlCommand myCommand
= new SqlCommand("Account_Check",myConnection);
myCommand.CommandType
=CommandType.StoredProcedure;
SqlParameter prmAccountName
=myCommand.Parameters.Add(new SqlParameter("@AccountName",SqlDbType.VarChar,50));
prmAccountName.Value
=accountName;
SqlParameter prmPassword
=myCommand.Parameters.Add(new SqlParameter("@password",SqlDbType.Binary,50));
prmPassword.Value
=bytePassword;
SqlParameter prmReturnValue
=myCommand.Parameters.Add(new SqlParameter("@Return_Value",SqlDbType.Int,4));
prmReturnValue.Direction
=ParameterDirection.ReturnValue;
myCommand.ExecuteNonQuery();
int accountID=(int)prmReturnValue.Value;
myCommand.Dispose();
myConnection.Close();
return accountID;
}
//相关Store procedure
//登陆验证
CREATE PROCEDURE Account_Check @AccountName varchar(50),@Password binary(50)
AS
Declare @AccountId
int;
Select @AccountId
= AccountID From Accounts
Where accountName
=@accountname;
If isnull(@AccountID,
0)=0
Select @AccountId
= -1; --//账号错误!
Else
Begin
Select @accountID
=null
Select @AccountId
= AccountID From Accounts
Where accountName
=@accountname and password=@password;
If isnull(@AccountID,
0)=0
Select @AccountID
=0; --//密码错误!
End
Return @AccountID;
//用户增加
CREATE PROCEDURE Account_Add @accountName varchar(50),@password binary (50),@email varchar(50)
AS
insert into Accounts(accountName,password,email)
values(@accountName,@password,@email);
return @@Error;

希望可以帮到你 

收获园豆:1
寒狐 | 园豆:433 (菜鸟二级) | 2010-11-30 10:02
你好,按照你的方法做了以后,数据库里面保存的确实是二进制的,那个字段也是binary(50)。但是没有办法取出来再解密了,还请帮忙分析一下!
支持(0) 反对(0) 无 影 | 园豆:59 (初学一级) | 2010-11-30 22:42
感谢大家的帮忙!
支持(0) 反对(0) 无 影 | 园豆:59 (初学一级) | 2010-12-01 18:21
0

FormsAuthentication.HashPasswordForStoringInConfigFile(this.TextBox2.Text, "md5");//使用MD5加密

收获园豆:1
something | 园豆:5 (初学一级) | 2010-11-30 11:11
感谢大家的帮忙!
支持(0) 反对(0) 无 影 | 园豆:59 (初学一级) | 2010-12-01 18:21
0

不解密就MD5,sha-1这类hash加密,解密的话,自己写加密算法。。。

收获园豆:1
顾晓北 | 园豆:10898 (专家六级) | 2010-11-30 14:51
感谢大家的帮忙!
支持(0) 反对(0) 无 影 | 园豆:59 (初学一级) | 2010-12-01 18:21
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册