|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
兄弟们,想来你们都看过了昨天的比赛了。我现在的痛苦状跟当时应该差不多。希望本版.net老师不吝赐教,为小弟这一批迷途的羊羔指一条阳光之道!您也知道:学习技术如果只有一个人摸索,那是一件多么痛苦的事情!还有,如果万辛能得名师或长者指点,那又是多么一件幸福和快乐的事情!换算|算法<Pstyle="TEXT-INDENT:2em">MD5是在Web使用程序中最经常使用的暗码加密算法。因为MD5是不成逆的,因此经由MD5盘算失掉后的密文,不克不及经由过程逆向算法失掉原文。<Pstyle="TEXT-INDENT:2em">回忆在Web使用程序中利用MD5加密文本暗码的初志,就是为了避免数据库中保留的暗码不幸保守后被间接取得。但打击者不仅具有数据量伟大的暗码字典,并且创建了良多MD5原文/密文对比数据库,能疾速地找到经常使用暗码的MD5密文,是破译MD5密文的高效路子。但是,MD5密文数据库所利用的是最惯例的MD5加密算法:原文-->MD5-->密文。因而,我们可使用变更的MD5算法,使现成的MD5密文数据库无所事事。<Pstyle="TEXT-INDENT:2em">上面演示一些变更算法的例子,固然,在别的的Web开辟言语中,也迥然不同,完整能失掉不异的了局。<Pstyle="TEXT-INDENT:2em">变更一:轮回MD5<Pstyle="TEXT-INDENT:2em">最简单了解的变更就是对一个暗码举行屡次的MD5运算。自界说一个函数,它承受$data和$times两个形参,第一个是要加密的暗码,第二个是反复加密的次数。完成这类变更有两种算法:<Pstyle="TEXT-INDENT:2em">- //迭代算法functionmd5_1_1($data,$times=32){//轮回利用MD5for($i=0;$i<$times;$i++){$data=md5($data);}return$data;}//递回算法functionmd5_1_2($data,$times=32){if($times>0){$data=md5($data);$times--;returnmd5_1_2($data,$times);//完成递回}else{return$data;}}?>
复制代码 <Pstyle="TEXT-INDENT:2em">变更二:密文支解MD5<Pstyle="TEXT-INDENT:2em">只管用户的暗码是不断定的字符串,可是只需经由一次MD5运算后,就会失掉一个由32个字符构成的字符串,这时候能够再针对这个定长字符串变更。有点BT的算法是,把这段密文支解成多少段,对每段都举行一次MD5运算,然后把这堆密文连成一个超长的字符串,最初再举行一次MD5运算,失掉仍旧是长度为32位的密文。<Pstyle="TEXT-INDENT:2em">- //把密文支解成两段,每段16个字符functionmd5_2_1($data){//先把暗码加密发展度为32字符的密文$data=md5($data);//把暗码支解成两段$left=substr($data,0,16);$right=substr($data,16,16);//分离加密后再兼并$data=md5($left).md5($right);//最初把长字串再加密一次,成为32字符密文returnmd5($data);}//把密文支解成32段,每段1个字符functionmd5_2_2($data){$data=md5($data);//轮回地截取密文中的每一个字符并举行加密、毗连for($i=0;$i<32;$i++){$data.=md5($data{$i});}//这时候$data长度为1024个字符,再举行一次MD5运算returnmd5($data);}?>
复制代码 <Pstyle="TEXT-INDENT:2em">固然,这类密文支解的详细算法是数之不尽的,好比能够把原密文支解成16段每段两字符、8段每段4字符,大概每段的字符数不相称……<Pstyle="TEXT-INDENT:2em">变更三:附加字符串干与<Pstyle="TEXT-INDENT:2em">在加密历程的一个步骤中,附加一个内容断定的字符串(好比说用户名),干与被加密的数据。不成以用随机字串,由于如许会使原算法没法重现。这类算法在某些情形下是很具有上风的,好比说用于大批的用户暗码加密,能够把用户名作为附加干与字串,如许打击者就算晓得你的算法,也很难从他们手中的字典中一会儿天生海量的对比表,然后大批地破译用户暗码,只能有针对性的穷举为数未几的用户。<Pstyle="TEXT-INDENT:2em">- //附加字符串在原数据的尾部functionmd5_3_1($data,$append){returnmd5($data.$append);}//附加字符串在原数据的头部functionmd5_3_2($data,$append){returnmd5($append.$data);}//附加字符串在原数据的头尾functionmd5_3_3($data,$append){returnmd5($append.$data.$append);}?>
复制代码 <Pstyle="TEXT-INDENT:2em">变更四:巨细写变更干与<Pstyle="TEXT-INDENT:2em">因为PHP所供应的md5()函数前往的密文中的英笔墨母全体都是小写的,因而我们能够把它们全体转为年夜写,然后再举行一次MD5运算。 <Pstyle="TEXT-INDENT:2em">- functionmd5_4($data){//先失掉暗码的密文$data=md5($data);//再把密文中的英文母全体转为年夜写$data=strtotime($data);//最初再举行一次MD5运算并前往returnmd5($data);}?>
复制代码 <Pstyle="TEXT-INDENT:2em">变更五:字符串序次干与<Pstyle="TEXT-INDENT:2em">把MD5运算后的密笔墨符串的按次调转后,再举行一次MD5运算。 <Pstyle="TEXT-INDENT:2em">- functionmd5_5($data){//失掉数据的密文$data=md5($data);//再把密笔墨符串的字符按次调转$data=strrev($data);//最初再举行一次MD5运算并前往returnmd5($data);}?>
复制代码 <Pstyle="TEXT-INDENT:2em">变更6、变更7、变更八……<Pstyle="TEXT-INDENT:2em">MD5变更算法是数之不尽的,乃至不必本人再往制造,就用下面的五个相互组合就能够弄出很BT的算法。好比说先轮回加密后再支解,并在每段上附加一个字符串再分离加密,然后变更巨细写并倒置字符串按次后连成一个长字符串再举行MD5运算……假如真的很不幸,因为某些毛病,好比说SQLInjection大概文件体系中的数据库被下载而异致用户暗码数据表露,那末MD5变更算法就可以年夜年夜地增添破译出暗码原文的难度,起首就是使网上良多的MD5原文/密文对比数据库(要晓得,这是破译MD5最高效的办法)没有效了,然后就是使打击者用惯例算法往穷举一串由变更算法失掉的密文而弄得焦头烂额。固然,MD5变更算法出格合适用于非开源的Web程序利用,虽然说用在开源的程序中上风会被减弱(人人都晓得算法),可是也能克制MD5原文/密文对比数据库的感化。要举行这些庞大的变更运算,固然就要消费的更多的体系开支了,但是关于平安性请求很严厉的体系来讲,多支付一些来调换高一点的平安性,是完整值得的。
不过你如果学.net的话,你就不要选os了,这课比较底层的。你可以旁听数据库加上软件构件和中间件。(webservices和面向服务的课也应该听一听) |
|