- //迭代算法
- function md5_1_1($data, $times = 32)
- {
- //循环使用MD5
- for ($i = 0; $i < $times; $i++) {
- $data = md5($data);
- }
- return $data;
- }
- //递归算法
- function md5_1_2($data, $times = 32)
- {
- if ($times > 0) {
- $data = md5($data);
- $times--;
- return md5_1_2($data, $times); //实现递归
- } else {
- return $data;
- }
- }
- ?>
变换二:密文分割MD5
- //把密文分割成两段,每段16个字符
- function md5_2_1($data)
- {
- //先把密码加密成长度为32字符的密文
- $data = md5($data);
- //把密码分割成两段
- $left = substr($data, 0, 16);
- $right = substr($data, 16, 16);
- //分别加密后再合并
- $data = md5($left).md5($right);
- //最后把长字串再加密一次,成为32字符密文
- return md5($data);
- }
- //把密文分割成32段,每段1个字符
- function md5_2_2($data)
- {
- $data = md5($data);
- //循环地截取密文中的每个字符并进行加密、连接
- for ($i = 0; $i < 32; $i++) {
- $data .= md5($data{$i});
- }
- //这时$data长度为1024个字符,再进行一次MD5运算
- return md5($data);
- }
- ?>
-
变换三:附加字符串干涉
- //附加字符串在原数据的尾部
- function md5_3_1($data, $append)
- {
- return md5($data.$append);
- }
- //附加字符串在原数据的头部
- function md5_3_2($data, $append)
- {
- return md5($append.$data);
- }
- //附加字符串在原数据的头尾
- function md5_3_3($data, $append)
- {
- return md5($append.$data.$append);
- }
- ?>
变换四:大小写变换干涉
由于PHP所提供的md5()函数返回的密文中的英文字母全部都是小写的,因此我们可以把它们全部转为大写,然后再进行一次MD5运算。
- function md5_4($data)
- {
- //先得到密码的密文
- $data = md5($data);
- //再把密文中的英文母全部转为大写
- $data = strtotime($data);
- //最后再进行一次MD5运算并返回
- return md5($data);
- }
- ?>
变换五:字符串次序干涉
把MD5运算后的密文字符串的顺序调转后,再进行一次MD5运算。
- function md5_5($data)
- {
- //得到数据的密文
- $data = md5($data);
- //再把密文字符串的字符顺序调转
- $data = strrev($data);
- //最后再进行一次MD5运算并返回
- return md5($data);
- }
- ?>
-
用好php md5()函数,在用户信息加密上多作些功夫,可以减少更多的安全风险。 |