中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

利用PHP怎么實現一個加密功能

發布時間:2020-12-23 16:24:22 來源:億速云 閱讀:138 作者:Leah 欄目:開發技術

利用PHP怎么實現一個加密功能?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

一、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,所以存在數據庫中的時候就是密碼保存的了

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加密,但是若是不給定“鹽值”,每次刷新,都是不一樣的結果;

然后可以指定鹽值,具體參見手冊,每個算法的鹽值長度是不一樣的,比如上述的DES和MD5,結果如下

1223b8c30a347321299611f873b449ad
$1$ed0.Ph..$fPbfhSOMLyNdtZn9krT8X/
im37cLeO/JPaQ
th22A1V7QCns.
$1$this is $Bu9FE8Y8oGnIbftjDA4ez0

DES只能取兩位,而MD5取了8位;

用法上也差不多,記得輸入鹽值才好。

三、Sha1

同樣是單向加密,不可破解(但網上的辦法都是類似數據庫一樣的“偽暴力”破解);

與MD5的區別在于返回更長的(40位)16進制的數串(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編碼

結果如下

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不是加密技術,只不過他會對data進行base64的編碼,也可以看做是一種加密技術;

/**
 * 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);

 等于說是對內容進行加密

總結

單項散列加密:得到固定長度的輸出,是單向的;

對稱散列加密:使用同一把密鑰進行加密解密,可以相互推算;(算法簡單,效率高,開銷小,適合對大量數據進行加密)DES等

非對稱加密技術:密鑰不一樣,公鑰和私鑰之分

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

php
AI

南城县| 峨眉山市| 青浦区| 中方县| 郁南县| 抚顺市| 弥勒县| 灵宝市| 拜城县| 邻水| 吴忠市| 白朗县| 格尔木市| 买车| 故城县| 博野县| 阿合奇县| 永平县| 宜宾县| 肃宁县| 玉林市| 武川县| 井陉县| 广德县| 沙坪坝区| 伊宁市| 定远县| 沭阳县| 扶沟县| 双流县| 客服| 四川省| 东乡| 泌阳县| 松溪县| 葵青区| 南川市| 门头沟区| 合山市| 曲麻莱县| 光泽县|