php第4课: 数据加密
php第4课:数据加密
时间 2019-04-03
主讲 刘培富
地点 在线分享,大家自学
前一课,在验证用户提交的用户和密码上,是明文传输的,安全性不高。正式开发项目时,需要把用户的密码进行加密存储,在验证时,对用户提交的密码进行加密,然后再比对。
本文,讲述两种加密方法:
1、md5函数
$str = "Shanghai";
echo md5($str); //32位小写
echo strtoupper(md5($str)); //32位大写
echo substr(md5($str),8,16); //16位小写
echo strtoupper(substr(md5($str),8,16)) //16位大写
按照md5加密的通用规范,生成密文。好处是不管长短、不管是否包含汉字,都可以,统一生成16位或32位的密文,且不可逆。
2、自定义加密函数
function encrypt($data, $key)
{
$data=iconv("gbk","utf-8",$data);
$key = md5($key);
$x = 0;
$char=$str="";
$len = strlen($data);
$l = strlen($key);
for ($i = 0; $i < $len; $i++)
{
if ($x == $l)
{
$x = 0;
}
$char .= $key{$x};
$x++;
}
for ($i = 0; $i < $len; $i++)
{
$str .= chr(ord($data{$i}) + (ord($char{$i})) % 256);
}
return base64_encode($str);
}
$key = 'liupeifu'; // 密钥
echo encrypt("aaa",$key);
这个方法,好处是有密钥做参数,安全性更高。缺点是不能用汉字,且字符串过长时,加密后的字符也很长。
一般来说,推荐方法一,对于安全性要求较高的,推荐方法二。