在一些带有会员系统功能的网站代码中,经常会在数据库中发现用户表中有类似于mzae5e2t5k24x45g2gl3这样的乱码,那么它是什么呢?
一般,这些是经过md5加密后的密码,它是由一个128位的16字节散列值组成,可以用来确认信息传输的完整与一致
性.
md5以512位分组来处理输入的信息,然后每一分组又被划分为16个32位子分组,经过了多重处理后,输出由四个32位分组组成的128位散列值.
那么怎样将常见的字符串生成为md5编码呢?
这里已常见的web编程语言php为例.
<?php
$md5 = "aaa";
echo $md5dx=strtoupper(md5($md5));
echo $md5xx=strtolower(md5($md5);
?>
在php中可以使用默认的md5函数,它可以方便的将指定字符串生成md5值。
在上面示例中,$md5dx会输出大写的md5值,$md5xx会输出小写的md5值.
那么为什么有时候我们见到的md5值为16位呢?
16位的md5是从默认的32位的md5值中截取的,我们可以直接用substr()函数从16位的加密值中截取出16位的md5值.
代码如下:
<?php
$md5 = "bbb";
echo substr($md5,8,16);
?>
从第8位开始截取,然后截取16个字符就从32位的md5变成了16位的md5值了.
如果需要批量MD5加密,还可以使用本站的md5加密工具,在浏览器中直接对文字创建md5编码.
理论上md5值无法被破解或解密,那么为什么网络上有很多md5的解密工具呢?
实际上这些解密功能依赖的是数据库,而不是算法解决的,数据库的数据量越庞大能够解密的成功率越高。
它们的原理也很简单,基本上就是通过将不同字母符号按照规律位数依次组合生成一个个加密的md5字符串以及原来的字符将其存放到数据库中,通过无穷的计算积累大量的加密的md5字符串与原来的字符串对比。
然后当需要解密时,会查询数据库中已存在md5加密的数据,如果有相同的md5值,那么与之对应的原来的字符就是需要解密后的文字内容.这样就可以实现md5的解密功能.