标签: 〖MD5〗


MD5加密与解密学习体会:我们为什么要设置复杂的密码?

我曾在ECMS论坛反映一个BUG:它的admin密码不支持使用特殊字符如“&”、“/”、“>”等,一个妹妹嘲笑我:为什么要把密码搞这么复杂?累不累?

老实说:很累!我杂七杂八的密码加起来有几十个,记住这些密码以及在哪儿存放备份都是问题,但对较重要的密码,我仍然会一丝不苟地按照某些商家的良好建议去设,这些原则是:

1. 不要设置与自己身份相关的密码

很多人习惯于用比如生日,办公电话,身份证号码,家人的名字……等等设置密码。

在我意识中,倒不是说要防身边的人,虽然这并非不必要,而是在网络的时代,你自己不见得能充分认识到这些信息会扩散到何种程度。比如说,我单位联系的银行和保险公司上门服务的业务员,手里就有我全套的资料,包括配偶;再比如域名注册信息查询(我诅咒隐藏域名信息还要另外收费的域名商)也有不少我的信息披露;最让我吃惊的是我们单位的笨蛋网管,居然能把分房的信息让在互联网上查到!谁过去住哪儿新房在哪儿工龄职称……真是恐怖!

所以,如果你有用私人信息设置密码的习惯,从今天起就改了它。

2. 不要设置过于简单的密码

复杂的密码是指:一要有足够的长度,二要混合使用多种符号(字母、数字、特殊字符等)。为什么要搞那么复杂呢?

这先得从密码的设置原理说起,一般密码加密还都是采用MD5算法,其加密解密过程参看前一篇文章:《MD5算法及其应用》,虽然说,MD5算法是不可逆的,但是,却可以象查字典一样查询MD5对应的字符串……不说理论上的,请做个测试你就明白了:

为更客观,我在http://tool.cnzz.cn/tool/md5.asp模拟生成一个随意的5位小写字母密码的MD5码:

image

然后换另一MD5破解站http://www.cmd5.com/Default.aspx去破解它:

image

原密码立刻显形!

*** 以上站点是本人为写此文随机选择的,安全性请自行判断 ***

对付这种解密方法,我们唯一能做的就是让密码长些、复杂些,增加它用解密字典原理解密的难度和成本。

你或许会问:他又如何知道我密码的MD5码呢?

要知道,你的密码的MD5码是在你注册商的数据库里明码存放的!黑客如何得到数据库里的数据我没研究过,可是作为一个站长,我可是知道它对于数据库的管理员是一览无余的。你在多少网站注册过?恐怕自己也记不清了吧;这些网站的管理员都可靠吗?你也说不清吧?那么你至少从今以后应该改掉这样一个恶习(如果有的话)——

3. 不要为不同的应用设置相同的密码

不要为了图方便,将你所有的密码设为一个。现在网络技术的发展使得个人做一个网站或者论坛几乎像看着菜谱学炒个菜一样简单了,或许你一时高兴,在某灌水论坛用和QQ相同的昵称和密码注册了账户,改天又去用同样的密码申请了PayPal账户……其愚蠢程度是显而易见的,但很多人却在这样做!

发表评论

MD5算法及其应用

MD5的全称是Message-Digest Algorithm 5(信息-摘要算法),在90年代初由MIT Laboratory for Computer Science和RSA Data Security Inc的Ronald L. Rivest开发出来,经MD2、MD3和MD4发展而来。它的作用是让大容量信息在用数字签名软件签署私人密匙前被"压缩"成一种保密的格式(就是把一个任意长度的字节串变换成一定长的大整数)。不管是MD2、MD4还是MD5,它们都需要获得一个随机长度的信息并产生一个128位的信息摘要。虽然这些算法的结构或多或少有些相似,但MD2的设计与MD4和MD5完全不同,那是因为MD2是为8位机器做过设计优化的,而MD4和MD5却是面向32位的电脑。这三个算法的描述和C语言源代码在Internet RFCs 1321中有详细的描述(http://www.ietf.org/rfc/rfc1321.txt),这是一份最权威的文档,由Ronald L. Rivest在1992年8月向IEFT提交。

Van Oorschot和Wiener曾经考虑过一个在散列中暴力搜寻冲突的函数(Brute-Force Hash Function),而且他们猜测一个被设计专门用来搜索MD5冲突的机器(这台机器在1994年的制造成本大约是一百万美元)可以平均每24天就找到一个冲突。但单从1991年到2001年这10年间,竟没有出现替代MD5算法的MD6或被叫做其他什么名字的新算法这一点,我们就可以看出这个瑕疵并没有太多的影响MD5的安全性。上面所有这些都不足以成为MD5的在实际应用中的问题。并且,由于MD5算法的使用不需要支付任何版权费用的,所以在一般的情况下(非绝密应用领域。但即便是应用在绝密领域内,MD5也不失为一种非常优秀的中间技术),MD5怎么都应该算得上是非常安全的了。

算法的应用

MD5的典型应用是对一段信息(Message)产生信息摘要(Message-Digest),以防止被篡改。比如,在UNIX下有很多软件在下载的时候都有一个文件名相同,文件扩展名为.md5的文件,在这个文件中通常只有一行文本,大致结构如:

MD5 (tanajiya.tar.gz) = 0ca175b9c0f726a831d895e269332461

这就是tanajiya.tar.gz文件的数字签名。MD5将整个文件当作一个大文本信息,通过其不可逆的字符串变换算法,产生了这个唯一的MD5信息摘要。如果在以后传播这个文件的过程中,无论文件的内容发生了任何形式的改变(包括人为修改或者下载过程中线路不稳定引起的传输错误等),只要你对这个文件重新计算MD5时就会发现信息摘要不相同,由此可以确定你得到的只是一个不正确的文件。如果再有一个第三方的认证机构,用MD5还可以防止文件作者的"抵赖",这就是所谓的数字签名应用。

MD5还广泛用于加密和解密技术上。比如在UNIX系统中用户的密码就是以MD5(或其它类似的算法)经加密后存储在文件系统中。当用户登录的时候,系统把用户输入的密码计算成MD5值,然后再去和保存在文件系统中的MD5值进行比较,进而确定输入的密码是否正确。通过这样的步骤,系统在并不知道用户密码的明码的情况下就可以确定用户登录系统的合法性。这不但可以避免用户的密码被具有系统管理员权限的用户知道,而且还在一定程度上增加了密码被破解的难度。

正是因为这个原因,现在被黑客使用最多的一种破译密码的方法就是一种被称为"跑字典"的方法。有两种方法得到字典,一种是日常搜集的用做密码的字符串表,另一种是用排列组合方法生成的,先用MD5程序计算出这些字典项的MD5值,然后再用目标的MD5值在这个字典中检索。我们假设密码的最大长度为8位字节(8 Bytes),同时密码只能是字母和数字,共26+26+10=62个字符,排列组合出的字典的项数则是P(62,1)+P(62,2)….+P(62,8),那也已经是一个很天文的数字了,存储这个字典就需要TB级的磁盘阵列,而且这种方法还有一个前提,就是能获得目标账户的密码MD5值的情况下才可以。这种加密技术被广泛的应用于UNIX系统中,这也是为什么UNIX系统比一般操作系统更为坚固一个重要原因。

发表评论

MD5校验码有什么用?

什么是MD5码?

在我们下载文档、软件、影片…等资源时,经常会看到类似:
MD5: C37B58C783456BF879C3DD5C519195A2
的额外信息,如果资源是以压缩包形式提供下载,则可能会随附一个包含如上信息的文件。这就是资源的MD5校验值。

MD5码是message-digest algorithm 5(信息-摘要算法)的缩写,被广泛用于加密和解密技术上,它可以说是文件的“数字指纹”。任何一个文件,无论是可执行程序、图像文件、临时文件或者其他任何类型的文件,也不管它体积多大,都有且只有一个独一无二的MD5信息码,并且如果这个文件被修改过,它的MD5码也将随之改变。

MD5校验值对我们有什么用?

简单地说,它能检验您最终下载到本地的文件是否完整、安全。您下载下来的东西有可能与原始文件不同,这种情况可以是网络传输过程中意外错误造成的,也可以是人为的,越流行、越好的东西,被恶意篡改,加入篡改人自己的标志、广告、甚至病毒的可能性就越大。

所以对于重要文档、软件,第一我们应该到值得信赖网站去下载,当然最好是原开发方的“官方”网站;第二我们应该使用MD5校验。使用MD5校验需要借助于MD5校验工具,这在网络上很容易得到。

MD5码如何使用?

MD5校验工具的使用简单,大同小异。文件校验过程大抵是:

1、下载一个MD5码校验工具;
2、运行MD5码校验工具;
3、点浏览指定所要检查的文件,选择计算MD5码,等待生成;
4、检查生成的MD5码是否与“官方”或权威的下载网站提供的相同;
5、如果得到的MD5码和权威网站公布的相同,可确认所下载的文件是完整且正确的否则,说明你下载的文件不完整,可能是在网络下载的过程中出现错误,也可能是文件已被别人修改,谨慎起见,您不应该再使用这份文件,应当重新下载,或换一个更安全可靠的下载地点。

MD5除用于文件的数字签名,还常用于文件加密等,请参见下一篇:MD5算法

发表评论