php第4課:數(shù)據(jù)加密
時(shí)間 2019-04-03
主講?劉培富
地點(diǎn)?在線分享默辨,大家自學(xué)
前一課,在驗(yàn)證用戶提交的用戶和密碼上苍息,是明文傳輸?shù)乃跣遥踩圆桓摺U介_發(fā)項(xiàng)目時(shí)竞思,需要把用戶的密碼進(jìn)行加密存儲(chǔ)表谊,在驗(yàn)證時(shí),對(duì)用戶提交的密碼進(jìn)行加密衙四,然后再比對(duì)铃肯。
本文,講述兩種加密方法:
1传蹈、md5函數(shù)
$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加密的通用規(guī)范押逼,生成密文。好處是不管長(zhǎng)短惦界、不管是否包含漢字挑格,都可以,統(tǒng)一生成16位或32位的密文沾歪,且不可逆漂彤。
2、自定義加密函數(shù)
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);
這個(gè)方法灾搏,好處是有密鑰做參數(shù)挫望,安全性更高。缺點(diǎn)是不能用漢字狂窑,且字符串過長(zhǎng)時(shí)媳板,加密后的字符也很長(zhǎng)。
一般來(lái)說(shuō)泉哈,推薦方法一蛉幸,對(duì)于安全性要求較高的,推薦方法二丛晦。