《PHP編程:PHP加密技術(shù)的簡(jiǎn)單實(shí)現(xiàn)》要點(diǎn):
本文介紹了PHP編程:PHP加密技術(shù)的簡(jiǎn)單實(shí)現(xiàn),希望對(duì)您有用。如果有疑問(wèn),可以聯(lián)系我們。
一、MD5加密PHP學(xué)習(xí)
直接干,這里以一個(gè)登錄頁(yè)面為例:PHP學(xué)習(xí)
<?php require_once 'config/database.config.php'; $act=$_REQUEST['act']; $username=$_POST['username']; $password=md5($_POST['password']); if ($act=='reg') { $sql="INSERT INTO user(username,password) VALUES('{$username}','{$password}')"; $result=mysqli_query($link, $sql); if ($result) { echo "Success"; echo "<meta http-equiv='refresh' content='1;url=login.html'/>"; }else { echo "Failure!"; echo "<meta http-equiv='refresh' content='1;url=reg.html'/>"; } }elseif ($act=='login') { $sql="SELECT * FROM user WHERE username='{$username}' AND password='{$password}'"; $result=mysqli_query($link, $sql); $validate=mysqli_fetch_array($result); //var_dump($validate); if ($validate) { echo "success"; echo "<meta http-equiv='refresh' content='1;url=http://www.baidu.com'/>"; }else { echo "failure"; echo "<meta http-equiv='refresh' content='1;url=login.html'/>"; } }
主要就是記得比對(duì)的時(shí)候也使用MD5,所以存在數(shù)據(jù)庫(kù)中的時(shí)候就是密碼保存的了PHP學(xué)習(xí)
mysql> SELECT * FROM user; +----+----------+----------------------------------+ | id | username | password | +----+----------+----------------------------------+ | 1 | 123 | d41d8cd98f00b204e9800998ecf8427e | | 2 | 123 | 5e12a8f9c9e959060fdcaea165393039 | | 3 | | d41d8cd98f00b204e9800998ecf8427e | | 4 | root | 202cb962ac59075b964b07152d234b70 | | 5 | root | 0c51f0ba4316a5c844397f69effe2d01 | +----+----------+----------------------------------+
二、Crypt加密算法PHP學(xué)習(xí)
同樣是一個(gè)單向加密算法,無(wú)法由密文直接得到明文密碼(和MD5一樣);PHP學(xué)習(xí)
語(yǔ)法:string crypt(string $str[,string $salt]),$str為加密明文,$salt為干擾項(xiàng),可以理解為椒鹽噪聲;PHP學(xué)習(xí)
/** * Crypt */ echo crypt('shit'); echo "<hr/>"; echo crypt('shit','im'); echo "<hr/>"; if (CRYPT_EXT_DES) { echo crypt('shit','this is a test'); } echo "<hr/>"; if (CRYPT_MD5) { echo crypt('shit','$1$this is a test$'); }
基本沒(méi)什么要說(shuō)的,就一點(diǎn),crypt的加密有不同的加密算法,默認(rèn)的是MD5加密,但是若是不給定“鹽值”,每次刷新,都是不一樣的結(jié)果;PHP學(xué)習(xí)
然后可以指定鹽值,具體參見(jiàn)手冊(cè),每個(gè)算法的鹽值長(zhǎng)度是不一樣的,比如上述的DES和MD5,結(jié)果如下PHP學(xué)習(xí)
1223b8c30a347321299611f873b449ad $1$ed0.Ph..$fPbfhSOMLyNdtZn9krT8X/ im37cLeO/JPaQ th12A1V7QCns. $1$this is $Bu9FE8Y8oGnIbftjDA4ez0
DES只能取兩位,而MD5取了8位;PHP學(xué)習(xí)
用法上也差不多,記得輸入鹽值才好.PHP學(xué)習(xí)
三、Sha1PHP學(xué)習(xí)
同樣是單向加密,不可破解(但網(wǎng)上的辦法都是類似數(shù)據(jù)庫(kù)一樣的“偽暴力”破解);PHP學(xué)習(xí)
與MD5的區(qū)別在于返回更長(zhǎng)的(40位)16進(jìn)制的數(shù)串(MD5是32位);PHP學(xué)習(xí)
/** * Sha1 */ echo "<hr/>"; echo sha1('shit'); echo "<hr/>"; echo sha1('shit',true); echo "<hr/>"; echo sha1('admin');
所以,一般加密保存,不要單獨(dú)使用這些密碼,不如這樣子混合使用:PHP學(xué)習(xí)
echo "<hr/>"; echo sha1(sha1('admin',true)); echo "<hr/>"; echo sha1(md5('admin'));
等于是加密外面又自行進(jìn)行了簡(jiǎn)單的加密!!PHP學(xué)習(xí)
四、URL編碼加密PHP學(xué)習(xí)
對(duì)地址欄信息進(jìn)行加密;PHP學(xué)習(xí)
雙向,urlencode和urldecode;PHP學(xué)習(xí)
/** * URL編碼加密 */ $str="this is a test"; $result=urlencode($str); echo $result; echo "<hr/>"; echo urldecode($result); echo "<hr/>"; $str="login.php?username=shit&action=act%3 hape#123\\"; echo urlencode($str); echo "<hr/>"; echo "<a href='index.php?username=shit&gender=male'>Shit Login</a>"; print_r($_GET); echo "<hr/>"; //所以地址欄進(jìn)行一下編碼,一方面是保密,一方面是處理特殊情況 //比如username&shit是一個(gè)整體,不編碼的話,瀏覽器是看不出的 echo "<a href='index.php?username=username&shit&gender=male'>Shit Login2</a>"; print_r($_GET); echo "<hr/>"; $str="username&shit"; $str2="username=".urlencode($str)."&gender=".urlencode("male"); echo "<a href='index.php?".$str2."'>Shit Login3</a>"; print_r($_GET); echo "<hr/>"; //baidu example //https://www.baidu.com/s?ie=utf8&wd=url%E7%BC%96%E7%A0%81%E5%8A%A0%E5%AF%86&tn=87048150_dg //search url編碼
結(jié)果如下PHP學(xué)習(xí)
this+is+a+test this is a test login.php%3Fusername%3Dshit%26action%3Dact%253+hape%23123%5C Shit LoginArray ( [username] => username&shit [gender] => male ) Shit Login2Array ( [username] => username&shit [gender] => male ) Shit Login3Array ( [username] => username&shit [gender] => male )
所以功能就是:地址欄更加安全,不再明文傳輸,另一個(gè)解決特殊情況的傳遞PHP學(xué)習(xí)
五、Base64編碼加密PHP學(xué)習(xí)
其實(shí)base64不是加密技術(shù),只不過(guò)他會(huì)對(duì)data進(jìn)行base64的編碼,也可以看做是一種加密技術(shù);PHP學(xué)習(xí)
/** * Base64 */ $data="I am king"; echo base64_encode($data); echo "<hr/>"; echo base64_decode(base64_encode($data)); echo "<hr/>"; echo base64_encode("中文測(cè)試"); echo "<hr/>"; // echo base64_decode("R0lGODlhAQABAIAAAP///wAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw=="); $data=file_get_contents("0.jpg"); echo base64_encode($data);
?等于說(shuō)是對(duì)內(nèi)容進(jìn)行加密;PHP學(xué)習(xí)
總結(jié)PHP學(xué)習(xí)
單項(xiàng)散列加密:得到固定長(zhǎng)度的輸出,是單向的;PHP學(xué)習(xí)
對(duì)稱散列加密:使用同一把密鑰進(jìn)行加密解密,可以相互推算;(算法簡(jiǎn)單,效率高,開(kāi)銷小,適合對(duì)大量數(shù)據(jù)進(jìn)行加密)DES等PHP學(xué)習(xí)
非對(duì)稱加密技術(shù):密鑰不一樣,公鑰和私鑰之分PHP學(xué)習(xí)
以上這篇PHP加密技術(shù)的簡(jiǎn)單實(shí)現(xiàn)就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持維易PHP.PHP學(xué)習(xí)
轉(zhuǎn)載請(qǐng)注明本頁(yè)網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/3943.html