还记得前段时间CSDN账号密码泄露的事件吗,用户的密码没有经过任何的处理就直接保存到数据库了。这个看似不会有任何问题的操作,也被大多数程序员接受的做法,而就是因为这种做法,导致了账号被泄露。当然我自己也搞到了CSDN的数据,只是用于学习之用。
而今天在公司看到同事写的一个项目,却刚刚有对密码进行md5加密,所有为了自己以后可以更好的学习,也为了博客园的朋友们一起成长,这里只是抱着一种分享的态度和大家一起成长。
好了废话不多说了,我们开始简单的MD5练习了。想学的跟着我的步伐吧……
首先我们要创建一个数据库表,这里我只是简单的创建了一个只有用户id,用户姓名,用户密码。当然你的话需要根据自己的需求添加字段。这里需要注意一点的是,我一开始把用户密码的长度设置为varchar(20)运行的时候报错了,最后改成了nvarchar(40)运行没有问题了。后来查看了一下加密后的密码的长度为32位的。这里只是提供参考。
create table myAdmin( uid int identity(1,1) not null, uname varchar(20) not null, upassword nvarchar(40) not null, )
数据库建好了,现在我们开始创建我们的项目了,开发的IDE是vs2008,做的是b/s。首先我们创建了一张MyStudyMD5的页面,然后拖两个textbox控件和一个button控件,为了简便这里的控件的设置为默认。然手双击页面上的button按钮,跳到c#的代码了,首先我们自己建一个MD5加密方法:
protected string MD5(string str) { byte[] bytes = Encoding.ASCII.GetBytes(str); bytes = new MD5CryptoServiceProvider().ComputeHash(bytes); StringBuilder result = new StringBuilder(); for (int i = 0; i < bytes.Length; i++) { result.Append(bytes[i].ToString("x2")); } return result.ToString(); }
然后我们在button事件中写方法,并调用这个加密的MD5。代码如下:
protected void Button1_Click(object sender, EventArgs e) { string SqlStr = "INSERT INTO myAdmin(uname,upassword) values('"+TextBox1.Text.Trim()+"','"+MD5(TextBox2.Text.Trim())+"')"; if (operateData.execSql(SqlStr)) { ClientScript.RegisterClientScriptBlock(this.GetType(), "注册成功", "<script>alert('注册成功')</script>"); } //string SqlStr = "select upassword from myAdmin where uid=2"; //string password = operateData.getTier(SqlStr); //ClientScript.RegisterClientScriptBlock(this.GetType(),"11","<script>alert('"+password.Length+"')</script>"); }
好了,MD5加密的过程已经结束了。当然方法不是我的,我只不过踩在前人的基础并取其精华。
如果你有跟好的加密算法别忘记了和别人分享……因为分享也是一种快乐。