解析:
一、MD5是何方神圣?
所谓MD5,即"Message-Digest Algorithm 5(信息-摘要算法)",它由MD2、MD3、MD4发展而来的一种单向函数算法(也就是HASH算法),它是国际著名的公钥加密算法标准RSA的第一设计者R.Rivest于上个世纪90年代初开发出来的。MD5的最大作用在于,将不同格式的大容量文件信息在用数字签名软件来签署私人密钥前"压缩"成一种保密的格式,关键之处在于——这种"压缩"是不可逆的。
为了让读者朋友对MD5的应用有个直观的认识,笔者以一个比方和一个实例来简要描述一下其工作过程:
大家都知道,地球上任何人都有自己独一无二的指纹,这常常成为公安机关鉴别罪犯身份最值得信赖的方法;与之类似,MD5就可以为任何文件(不管其大小、格式、数量)产生一个同样独一无二的"数字指纹",如果任何人对文件做了任何改动,其MD5值也就是对应的"数字指纹"都会发生变化。
我们常常在某些软件下载站点的某软件信息中看到其MD5值,它的作用就在于我们可以在下载该软件后,对下载回来的文件用专门的软件(如Windows MD5 Check等)做一次MD5校验,以确保我们获得的文件与该站点提供的文件为同一文件。利用MD5算法来进行文件校验的方案被大量应用到软件下载站、论坛数据库、系统文件安全等方面。
笔者上面提到的例子只是MD5的一个基锋昌键本应用,实际上MD5还被用于加密解密技术上,如Unix、各类BSD系统登录密码(在MD5诞生前采用的是DES加密算法,后因MD5安全性更高,DES被淘汰)、通信信息加密(如大家熟悉的即时通信软件MyIM)、数字签名等诸多方面。
二、MD5的消亡之路
实际上,从MD5诞生之日起,来自美国名为Van Oorschot和Wiener的两位密码学专家就发现了一个暴力搜寻冲突的函数,并预算出"使用一个专门用来搜索MD5冲突的机器可以平均每24天就找到一个冲突"。不过由于该方案仅仅从理论上证明了MD5的不安全性,且实现的代价及其夸张(当时要制造这种专门的计算机,成本需要100万美元),于是MD5自其迅陪诞生十多年来一直未有新版本或者被其它算法彻底取代。
在接下来的日子里,有关MD5的破译又诞生了"野蛮攻击",也就是用银巧"穷举法"从所有可能产生的结果中找到被MD5加密的原始明文,不过由于MD5采用128位加密方法,即使一台机器每秒尝试10亿条明文,那么要破译出原始明文大概需要10的22次方年,而一款名为"MD5爆破工具"的软件,每秒进行的运算仅仅为2万次!
经过无数MD5算法研究专家的努力,先后又诞生了"生日攻击"、"微分攻击"等多种破译方法(相关信息大家可以参考研究成果,大大推进了md5算法消亡的进程。尽管在研究报告中并没有提及具体的实现方法,我们可以认为,md5被彻底攻破已经扫除了技术上的障碍,剩下的仅仅是时间和精力上的问题。/" target=_blank>md5crk)。此次山东大学几位教授的最新研究成果,大大推进了MD5算法消亡的进程。尽管在研究报告中并没有提及具体的实现方法,我们可以认为,MD5被彻底攻破已经扫除了技术上的障碍,剩下的仅仅是时间和精力上的问题。
这里以字符串123456为例子,它的md5密文值为:e10adc3949ba59abbe56e057f20f883e\x0d\x0a这里以1.txt为需要被加密的文件。\x0d\x0a\x0d\x0a一、用oppnsslmd5加密字符串和文件的方法。\x0d\x0a1.oppnsslmd5加密字符串的方法\x0d\x0aa.手动输入命令及过程如下:\x0d\x0a#openssl//在终端中输入openssl后回车。\x0d\x0aOpenSSL>md5//轮答输入md5后回车\x0d\x0a123456//接着输入123456,不要输入回车。然后按3次ctrl+d。\x0d\x0a123456e10adc3949ba59abbe56e057f20f883e//123456后面的就是密文了\x0d\x0a解释:为何在输入123456后不回车呢?\x0d\x0a是因为openssl默认会把回车符当做要加密的字符串中的一个字符,所以得到的结果不同。如果你输入123456后回车,在按2次ctrl+d。得到的结果是:\x0d\x0aOpenSSL>md5\x0d\x0a123456\x0d\x0af447b20a7fcbf53a5d5be013ea0b15af//因为openssl不忽略回车符导致的\x0d\x0ab.或者直接用管道命令\x0d\x0a#echo-n123456|opensslmd5//必须要有-n参数,否则就不是这个结果了。\x0d\x0ae10adc3949ba59abbe56e057f20f883e\x0d\x0a解释:为何要加-n这个参数?\x0d\x0a-n就表示不输入回车符,这样才能得到正确的结果。如果你不加腊哗慧-n,那么结果和前面说的一样为:\x0d\x0af447b20a7fcbf53a5d5be013ea0b15af//因为openssl不忽略回车符导致的\x0d\x0a2.用openssl加密文件。\x0d\x0a#opensslmd5-in1.txt\x0d\x0a\x0d\x0a##################################################3\x0d\x0aOpenssl其他相关加密的命令参数:引自:实用命令:利用openssl进行BASE64编码解码、md5/sha1摘要、AES/DES3加密解密收藏\x0d\x0a一.利用openssl命令进行BASE64编码解码(base64encode/decode)\x0d\x0a1.BASE64编码命令\x0d\x0a对字符串‘abc’进行base64编码:\x0d\x0a#echoabc|opensslbase64\x0d\x0aYWJjCg==(编码结果)\x0d\x0a如果对一个文件进行base64编码(文件名t.txt):\x0d\x0a#opensslbase64-int.txt\x0d\x0a2.BASE64解码命芦如令\x0d\x0a求base64后的字符串‘YWJjCg==’的原文:\x0d\x0a#echoYWJjCg==|opensslbase64-d\x0d\x0aabc(解码结果)\x0d\x0a如果对一个文件进行base64解码(文件名t.base64):\x0d\x0a#opensslbase64-d-int.base64\x0d\x0a二.利用openssl命令进行md5/sha1摘要(digest)\x0d\x0a1.对字符串‘abc’进行md5摘要计算:echoabc|opensslmd5\x0d\x0a若对某文件进行md5摘要计算:opensslmd5-int.txt\x0d\x0a2.对字符串‘abc’进行sha1摘要计算:echoabc|opensslsha1\x0d\x0a若对某文件进行sha1摘要计算:opensslsha1-int.txt\x0d\x0a三.利用openssl命令进行AES/DES3加密解密(AES/DES3encrypt/decrypt)\x0d\x0a对字符串‘abc’进行aes加密,使用密钥123,输出结果以base64编码格式给出:\x0d\x0a#echoabc|opensslaes-128-cbc-k123-base64\x0d\x0aU2FsdGVkX18ynIbzARm15nG/JA2dhN4mtiotwD7jt4g=(结果)\x0d\x0a对以上结果进行解密处理:\x0d\x0a#echoU2FsdGVkX18ynIbzARm15nG/JA2dhN4mtiotwD7jt4g=|opensslaes-128-cbc-d-k123-base64\x0d\x0aabc(结果)\x0d\x0a若要从文件里取原文(密文)进行加密(解密),只要指定-in参数指向文件名就可以了。\x0d\x0a进行des3加解密,只要把命令中的aes-128-cbc换成des3就可以了。\x0d\x0a注:只要利用opensslhelp就可以看到更多的安全算法了。\x0d\x0a###############################################\x0d\x0a\x0d\x0a二、利用php的md5函数加密字符串\x0d\x0a#toucha.php//创建a.php文件\x0d\x0a#via.php//用vi编辑a.php文件\x0d\x0a将输入进去后保存\x0d\x0a#phpa.php//运行a.php文件\x0d\x0a显示:e10adc3949ba59abbe56e057f20f883e\x0d\x0a三、利用md5sum命令\x0d\x0aA.在linux或Unix上,md5sum是用来计算和校验文件报文摘要的工具程序。一般来说,安装了Linux后,就会有md5sum这个工具,直接在命令行终端直接运行。可以用下面的命令来获取md5sum命令帮助manmd5sum\x0d\x0a#md5sum_help\x0d\x0a有个提示:“WithnoFILE,orwhenFILEis-,readstandardinput.”翻译过来就是“如果没有输入文件选项或者文件选项为-,则从标砖读取输入内容”,即可以直接从键盘读取字符串来加密。\x0d\x0a利用md5sum加密字符串的方法\x0d\x0a#md5sum//然后回车\x0d\x0a123456//输入123456.然后按两次ctrl+d.\x0d\x0a显示:\x0d\x0a123456e10adc3949ba59abbe56e057f20f883e红色代表加密后的值\x0d\x0a还可以用管道命令:\x0d\x0a#echo-n'123123'|md5sum\x0d\x0a\x0d\x0a或者写成md5加密脚本,名字叫md5.sh,\x0d\x0a将以下内容复制进脚本里:\x0d\x0a#!/bin/bash\x0d\x0aecho-n$1|md5sum|awk'{print$1}'\x0d\x0a\x0d\x0a保存后,给脚本执行权限。\x0d\x0a#shmd5.sh123456\x0d\x0a显示:e10adc3949ba59abbe56e057f20f883e\x0d\x0aB.其实也可以将文本放入文本文件,然后用md5sum加密改文本,也可以得到字符串加密的值。过程如下:\x0d\x0a#toucha.txt\x0d\x0a#echo-n123456>a.txt//将123456写进文本文件,不能丢了_n参数,避免回车符干扰\x0d\x0a#md5suma.txt\x0d\x0a显示:e10adc3949ba59abbe56e057f20f883ea.txt\x0d\x0a\x0d\x0actrl+d有两个含义:\x0d\x0a一是向程序发送文件输入结束符EOF。\x0d\x0a二是向程序发送exit退出指令。程序收到信号后具体动作是结束输入、然后等待,还是直接退出,那就要看该程序捕获信号后是如何 *** 作的了。\x0d\x0amd5sum属于第一个含义。两次strl+d了,第一次读取EOF指令,再次捕获就会当成exit指令。而shell一类的程序,会直接把ctrl+d解析为退出指令。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)