PHP加密技術(shù)的簡單實現(xiàn)
一、MD5加密
直接干,這里以一個登錄頁面為例:
<?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'/>";
}
}
主要就是記得比對的時候也使用MD5,所以存在數(shù)據(jù)庫中的時候就是密碼保存的了
mysql> SELECT * FROM user; +----+----------+----------------------------------+ | id | username | password | +----+----------+----------------------------------+ | 1 | 123 | d41d8cd98f00b204e9800998ecf8427e | | 2 | 123 | 5e12a8f9c9e959060fdcaea165393039 | | 3 | | d41d8cd98f00b204e9800998ecf8427e | | 4 | root | 202cb962ac59075b964b07152d234b70 | | 5 | root | 0c51f0ba4316a5c844397f69effe2d01 | +----+----------+----------------------------------+
二、Crypt加密算法
同樣是一個單向加密算法,無法由密文直接得到明文密碼(和MD5一樣);
語法:string crypt(string $str[,string $salt]),$str為加密明文,$salt為干擾項,可以理解為椒鹽噪聲;
/**
* 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$');
}
基本沒什么要說的,就一點,crypt的加密有不同的加密算法,默認的是MD5加密,但是若是不給定“鹽值”,每次刷新,都是不一樣的結(jié)果;
然后可以指定鹽值,具體參見手冊,每個算法的鹽值長度是不一樣的,比如上述的DES和MD5,結(jié)果如下
1223b8c30a347321299611f873b449ad $1$ed0.Ph..$fPbfhSOMLyNdtZn9krT8X/ im37cLeO/JPaQ th12A1V7QCns. $1$this is $Bu9FE8Y8oGnIbftjDA4ez0
DES只能取兩位,而MD5取了8位;
用法上也差不多,記得輸入鹽值才好。
三、Sha1
同樣是單向加密,不可破解(但網(wǎng)上的辦法都是類似數(shù)據(jù)庫一樣的“偽暴力”破解);
與MD5的區(qū)別在于返回更長的(40位)16進制的數(shù)串(MD5是32位);
/**
* Sha1
*/
echo "<hr/>";
echo sha1('shit');
echo "<hr/>";
echo sha1('shit',true);
echo "<hr/>";
echo sha1('admin');
所以,一般加密保存,不要單獨使用這些密碼,不如這樣子混合使用:
echo "<hr/>";
echo sha1(sha1('admin',true));
echo "<hr/>";
echo sha1(md5('admin'));
等于是加密外面又自行進行了簡單的加密!!
四、URL編碼加密
對地址欄信息進行加密;
雙向,urlencode和urldecode;
/**
* 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/>";
//所以地址欄進行一下編碼,一方面是保密,一方面是處理特殊情況
//比如username&shit是一個整體,不編碼的話,瀏覽器是看不出的
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é)果如下
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 )
所以功能就是:地址欄更加安全,不再明文傳輸,另一個解決特殊情況的傳遞
五、Base64編碼加密
其實base64不是加密技術(shù),只不過他會對data進行base64的編碼,也可以看做是一種加密技術(shù);
/**
* Base64
*/
$data="I am king";
echo base64_encode($data);
echo "<hr/>";
echo base64_decode(base64_encode($data));
echo "<hr/>";
echo base64_encode("中文測試");
echo "<hr/>";
// echo base64_decode("R0lGODlhAQABAIAAAP///wAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==");
$data=file_get_contents("0.jpg");
echo base64_encode($data);
等于說是對內(nèi)容進行加密;
總結(jié)
單項散列加密:得到固定長度的輸出,是單向的;
對稱散列加密:使用同一把密鑰進行加密解密,可以相互推算;(算法簡單,效率高,開銷小,適合對大量數(shù)據(jù)進行加密)DES等
非對稱加密技術(shù):密鑰不一樣,公鑰和私鑰之分
以上這篇PHP加密技術(shù)的簡單實現(xiàn)就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
基于PHP讀取TXT文件向數(shù)據(jù)庫導(dǎo)入海量數(shù)據(jù)的方法
本篇文章小編為大家介紹,基于PHP讀取TXT文件向數(shù)據(jù)庫導(dǎo)入海量數(shù)據(jù)的方法。需要的朋友參考下2013-04-04
TP5使用RabbitMQ實現(xiàn)消息隊列的項目實踐
本文主要介紹了TP5使用RabbitMQ實現(xiàn)消息隊列的項目實踐,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧2023-06-06
Laravel-添加后臺模板AdminLte的實現(xiàn)方法
今天小編就為大家分享一篇Laravel-添加后臺模板AdminLte的實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-10-10
CodeIgniter實現(xiàn)從網(wǎng)站抓取圖片并自動下載到文件夾里的方法
這篇文章主要介紹了CodeIgniter實現(xiàn)從網(wǎng)站抓取圖片并自動下載到文件夾里的方法,實例分析了CodeIgniter網(wǎng)頁圖片操作的相關(guān)技巧,需要的朋友可以參考下2015-06-06
php實現(xiàn)的一個很好用HTML解析器類可用于采集數(shù)據(jù)
下面就是這個 HTML解析類及用法,下面的功能是采集www.opendir.cn這個網(wǎng)站的百度收錄數(shù)據(jù),需要的朋友可以測試下2013-09-09

