第三天 -- 《2014-07-18 三层架构》2 -- MD5、删除记录、更新记录
一、下午《01、新增时添加地区信息》--《03、winform中自带方法实现md5加密》
1、MD5概念
MD5即Message-Digest Algorithm 5(中文名为消息摘要算法第五版),为计算机安全领域广泛使用的一种散列函数,用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法),主流编程语言普遍已有MD5实现。将数据(如汉字)运算为另一固定长度值,是杂凑算法的基础原理,MD5的前身有MD2、MD3和MD4。
MD5算法特点:
<1>压缩性:任意长度的数据,算出的MD5值长度都是固定的。(32个字符)
<2>容易计算:从原数据计算出MD5值很容易。
<3>抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。
<4>强抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。
MD5用途:
<1>一致性验证
文本或文件的MD5值就像是这个文件的“数字指纹”。每个文件的MD5值是不同的,如果任何人对文件做了任何改动,其MD5值也就是对应的“数字指纹”就会发生变化。所以MD5可以用来验证文件一致性。
<2>数字签名
正因为可以验证文件一致性,所以可以防止文件篡改者抵赖。起到数字签名的作用。
<3>安全访问认证
MD5广泛用于操作系统的登陆认证上,如Unix、各类BSD系统登录密码、数字签名等诸多方面。
2、MD5的C#代码
1 public static string GetMD5Form(string pwd) 2 {//获取密码明文的MD5码 3 MD5 md5 = MD5.Create();//实例化MD5对象 4 byte[] bytes = Encoding.Default.GetBytes(pwd);//获得字符串默认编码的字节数组 5 bytes = md5.ComputeHash(bytes); 6 StringBuilder sb = new StringBuilder(); 7 for (int i = 0; i < bytes.Length; i++) 8 { 9 sb.Append(bytes[i].ToString("X2"));//将字节数组内容以两位十六进制大写字符形式输出。如:01 02 0A FF 10 1A... 10 } 11 return sb.ToString(); 12 }
3、怎么才能破解MD5码
MD5码是将数据(文本或文件)当作一个大文本信息,通过其不可逆的字符串变换算法,产生了这个唯一的MD5信息摘要。也就是说依据32个字符的MD5码,无论如何也还原不出来原始文本(更不可能还原出原始文件、小电影等等)。所以这样来讲,MD5不能算是一种加密,而是数字签名。
但是除了广泛应用于文件下载后的一致性检查(看看文件是否在下载过程中,下载后被篡改),MD5还广泛用于“加密”用户密码,验证用户登录。如:将用户注册时输入的密码获取其MD5码存入数据库(存入MD5码即使泄漏也无法还原出用户密码)。以后每次验证用户登录时,将输入的密码获取其MD5码与数据库比对即可。
既然MD5不是加密算法,那就不存在破解一说。但是用MD5得到的数字签名(32个字符),我们仍然可以通过大量的“穷举”、“跑字典”去验证登录(现在有种叫“杂凑冲撞”)。所以很多重要的登录验证场合会限制用户“try”的次数(不过以现在的CPU速度,复杂密码try出来的时间是个天文数字)
穷举破解MD5码验证登录要多长时间?
大小写字母+数字总共有26+26+10=62中字符(这里先定义“a^b”表示a的b次方)。
则从1位到11位所包含的所有的密码的数量为:62^1+62^2+62^3+……+62^11=52 889 619 055 703 278 000条密码。
然后,在INTEL CORE T7100 1.8GHz的CPU下,用一个核心,破解速度可以达到4 000 000条密码/秒。
这样,要穷举上面所说的范围,所用的时间就是:
52 889 619 055 703 278 000
---------------------------———— = 13 222 404 763 926秒
4 000 000
换算下来,也就是425103年零12天4小时12分6秒。也就是说即使密码里面不包含标点符号且密码长度不超过11个字符,运气不好的话也要try几十万年。
所以说MD5方式一般场合验证登录密码还是安全的。
二、下午《04、实现人员信息的删除》
1、选中DataGridView行,获取行的绑定实体对象(即this.dgvList.CurrentRow.DataBoundItem as MODEL.Person)。获取实体对象Id
2、调用BLL层Delete(Id)方法,将Id作为参数传递。最终调用DAL层Delete(Id)方法。
3、DAL层Delete(Id)方法内写删除记录(或者更新isDel标志列)的sql语句和SqlParameter参数,最后调用SqlHelper.ExecuteNonQuery方法提交sql给服务器执行。
三、下午《05、修改时填充控件的数据》--《07、实现修改操作》
1、选中DataGridView行,获取行绑定的实体对象。点击“修改按钮”打开修改UI(实际上修改UI和新增UI可以复用,但是要做好标识——是新增还是修改)
2、将实体对象的属性显示在修改UI各控件上。
3、用户点击保存时将修改UI上的信息对实体对象赋值。最后调用BLL层Update(实体)方法,最终调用DAL层Update方法。
4、DAL层Update方法内写更新的sql语句和SqlParameter参数,最后调用SqlHelper.ExecuteNonQuery方法提交sql给服务器执行。
浙公网安备 33010602011771号