MD5 是什么?
《转贴自 石头闲语》
简单地说, MD5 是一种单向字串杂凑演算 (hashing) ,其可将你所给予的任何长度字串, 使用 MD5 杂凑演算法,得出一个长度为 128 位元 ( 16 个字元) 的计算结果, 以下以键值称之。
举例来说,你将 "ROCK" 这个字串,使用 MD5 演算的话,就会得到一个 128 位元的计算结果,以字串型式表示的话,则如同下行:
MD5 ("ROCK") = afeb717aa2a101f7f64840e0be38c171
用字串表示时,是把 128 位元的计算结果 (术语称之为 "digest code") ,转成十六进位码形式的字串,此字串需要 32 个字元空间 (即 256 位元)。
MD5 的其他说明条列如下:
固定的字串内容必定会得出一个固定的键值,而非每次都算出不同的。
这是一个单向的杂凑演算,意味着,它虽可每次都将同样的字串内容,算 出同样的键值,但它无法从键值反推算出原本的字串内容。
不同字串内容所演算出来的键值,有可能相同,但根据统计,重覆的机率小于百万分之一,以重覆率来说,是相当好的演算法。
演算速度快,对硬体的要求很低。
它可以演算任意长度的字串内容,而且能得出固定长度的键值。
就算字串内容只相差一个字,它也能算出完全不同的键值。
键值长达 128 位元,而且可接受任何长度的字串,就密码的安全性来讲,比过去常用的 DES 编码法还好。 DES 编码法,只能接受 8 个字元长度的字串,产生的键值只有 56 位元。
就最后两项,举个例子来验证,如下:
MD5 ("ROCK") = afeb717aa2a101f7f64840e0be38c171
MD5 ("RACK") = 1ece4bad0efe8b897c6e7f8bd101759f
MD5 ("ROCKY") = 6cd910740cbbbbd0f55238a93fba157d
MD5 ("Rock'S saying") = 7dca0df0dfa7f76b652e53daa4852640
最后要提的是, MD5 演算法,是由 RSA Data Security, Inc 公司所提出的。
如何取得 MD5 函数库
本人使用的 MD5 函数库,是取自 RSA Data Security 公司网站上,提供公开下载的版本,它只提供 C 语言原始码,不过不必担心编译的问题,根据我的测试,只要是 32位元的 C 语言编译器,都可以顺利编译,也没有作业系统平台的问题。
Ps. 我试过 gcc (win32, linux 及 freebsd) 及 borland c++ 5.0 (win32)
可以点取下列连结下载:
RSA Data Security, Inc.
我略做整理的原始码
此外,在某些作业系统中,例如 Freebsd ,由于内定采用 MD5 作为帐号密码的编码演算法,因此在系统中已内建 MD5 函数库,不须另外安装。
当你取得 RSA 的 MD5 原始码后,可以直接 make ,如果一切顺利,就会得到一个名叫 md5 的工具,这个工具,可以用来演算指定的档案内容或特定字串的键值。
这个工具非常好用,我略加说明使用方式。
如果你是要演算档案内容的键值,只要在指令 md5 后,直接加上档案名称做为参数即可,例如: md5 abc.zip ..
访客只能看到部份内容,免费 加入会员 或由脸书 Google 可以看到全部内容