PHP加密技術

来源:http://www.cnblogs.com/andy1202go/archive/2016/09/02/5831771.html
-Advertisement-
Play Games

一、MD5加密 直接乾,這裡以一個登錄頁面為例: 主要就是記得比對的時候也使用MD5,所以存在資料庫中的時候就是密碼保存的了 二、Crypt加密演算法 同樣是一個單向加密演算法,無法由密文直接得到明文密碼(和MD5一樣); 語法:string crypt(string $str[,string $sal ...


 

一、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,結果如下

1 1223b8c30a347321299611f873b449ad
2 $1$ed0.Ph..$fPbfhSOMLyNdtZn9krT8X/
3 im37cLeO/JPaQ
4 th12A1V7QCns.
5 $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等

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

 

      

 

 

 

 

 

 

 

                                                                                                                                                                                                                                                   

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、作為值的函數 結果: 二、匿名函數 三、帶函數參數的函數 結果: 四、參數(類型)推斷 匿名函數簡寫: 五、一些有用的高階函數 map這個方法將一個函數應用到某個集合的所有元素並返回結果 foreach將函數應用到每個元素,並不返回結果 結果: filter輸出所有匹配某個特定條件的元素 結果: ...
  • $pip install mysqlclient 運行結果如下: 可能是由於不相容導致的(中間試過各種方法,比如本地安裝mysql等等),最後找來mysqlclient-1.3.7-cp35-cp35m-win_amd64.whl資源,安裝成功! $pip install mysqlclient-1 ...
  • JPA 1.JPA概述 JPA(Java Persistence API)是Sun官方提出的Java持久化規範。它為Java開發人員提供了一種對象/關係映射工具來管理Java應用中的關係數據。,而Hibernate是它的一種實現。除了Hibernate,還有EclipseLink(曾經的toplin ...
  • Java5 在 java.util.concurrent 包中已經包含了讀寫鎖。儘管如此,我們還是應該瞭解其實現背後的原理。 讀/寫鎖的 Java 實現 先讓我們對讀寫訪問資源的條件做個概述: 讀取 沒有線程正在做寫操作,且沒有線程在請求寫操作。 寫入 沒有線程正在做讀寫操作。 如果某個線程想要讀取 ...
  • 事務和併發 1.事務概念 一組不可分割的操作,事務有如下屬性(ACID 屬性:Atomic Consistent Isolated Durable)(1)原子性 Atomic 事務的原子性指的是,事務中包含的程式作為資料庫的邏輯工作單位,它所做的對數據修改操作要麼全部執行,要麼完全不執行。 (2)一 ...
  • 如圖,生成如此旋轉的矩陣 輸入行N,列M,求上述矩陣 假定 縱向為x軸,橫向為y軸,從1開始 層數 k=min(i,j,N+1-i,M+1-j) k層矩陣的長 l=N-(k-1)*2 寬 w=M-(k-1)*2 矩陣左上角的坐標值為(k,k),根據外層矩陣的長寬可以算出數值,進而確定當前矩陣(i,j ...
  • 通過繼承ActionSupport類來完成Action開發,ActionSupport類不僅對Action介面進行簡單實現, 同時增加了驗證、本地化等支持 。真實開發中自定義Action都需要繼承該類。對用戶登錄添加表單驗證功能 ActionSupport類的作用: struts2不要求我們自己設計 ...
  • 任務隊列是指能夠實現任務在多線程間安全傳遞的先入先出的隊列。 任務是指組合了數據和操作的對象,這裡面定義為CTask類的對象。 任務的實現: Task.cpp 1 #include "stdafx.h" 2 #include "Task.h" 3 #include <iostream> 4 usin ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...