MD5是非常有名的加密算法,大学的算法教程里面也有学过 ,不 过 工作后没怎么用 过 ,具体内容差不多都忘 记 了。 |
最近在一个项目中用到了 MD5加密,但客 户担心个人信息泄露,询问我们加密后的内容是不是唯一的? |
MD5是散列算法,MD5的全称是Message-digest Algorithm 5(信息-摘要算法)。要重复是非常不容易的,还有现在也有不少网站有对 MD5加密后文字列 进行 解密。由于我 们项目中的加密前的文字列是唯一的,我的第一感觉那应该加密结果也是唯一的了。 但由于没有明确的理由,同 时也不知道自己的想法是不是对。只好上网 查 询,重新学习了一下 MD5算法。 |
MD5算法简 要地可以叙述 为 :MD5以512位分 组 来 处 理 输 入的信息,且每一分 组 又被划分 为 16个32位子分 组 , 经过 了一系列的 处 理后,算法的 输 出由四个32位分 组组 成,将 这 四个32位分 组级联 后将生成一个128位散列 值 。 |
MD5算法主要步骤: 步 骤 1:首先需要 对 信息 进 行填充,使其位 长对 512求余的 结 果等于448。 信息的位 长 (Bits Length)将被 扩 展至N*512+448,即N*64+56个字 节 (Bytes),N 为 一个正整数。填充的方法如下,在信息的后面填充一个1和无数个 0,直到 满 足上面的条件 时 才停止用0 对 信息的填充。然后,在在 这 个 结 果后面附加一个以64位二 进 制表示的填充前信息 长 度。 经过这 两步的 处 理, 现 在的信息的位 长 =N*512+448+64=(N+1)*512,即 长 度恰好是512的整数倍。 这样 做的原因是 为满 足后面 处 理中 对 信息 长 度的要求。 |
步骤 2:初始化MD 缓存。 为了计算消息摘要,将提供 4 个 8 字节的缓冲区。他们分别为: A=0x01234567 , B=0x89abcdef , C=0xfedcba98 , D=0x76543210 |
步骤 3: 针对 步 骤 1得到的 结 果,每 16个字 块进 行 处 理。也就是每 64byte作 为 一 组进 行 处 理。 操作中用到的四个非 线 性函数 。 F(X,Y,Z) = XY v not(X) Z G(X,Y,Z) = XZ v Y not(Z) H(X,Y,Z) = X xor Y xor Z I(X,Y,Z) = Y xor (X v not(Z)) 这 四个函数的 说 明:如果 X 、 Y 和 Z 的 对应 位是独立和均匀的,那么 结 果的每一位也 应 是独立和均匀的。 F 是一个逐位运算的函数。即,如果 X ,那么 Y ,否 则 Z 。函数 H 是逐位奇偶操作符。 然后做4 论 演算得出 结 果 |
确实 非常安全,不 过 2004年8月17日的美国加州圣巴巴拉的国 际 密 码 学会 议 (Crypto’2004)上,来自中国山 东 大学的王小云教授做了破 译 MD5、HAVAL-128、 MD4和RIPEMD算法的 报 告,公布了MD系列算法的破解 结 果。不 同的原文字串可能得出同样的结果。 宣告了固若金 汤 的世界通行密 码标 准MD5的堡 垒轰 然倒塌,引 发 了密 码 学界的 轩 然大波。 |
不同的原文字串可能得出同样 的 结 果, 这样 我 们 就可以回答客 户说 并不是 绝对 唯一的。但光告 诉 他不是唯一就可以了 吗 ,那肯定是不行的。具体就是在MD5加密的基 础再加上其他的限制条件,尽量避免这种实际上很难发生的事情。 |
参考网页:百度百科(http://baike.baidu.com/view/7636.htm ) |