首頁 後端開發 php教程 PHP中的加密與解密技術

PHP中的加密與解密技術

May 11, 2023 am 08:03 AM
php程式設計 加密技術 解密技術

PHP是一種廣泛應用的Web開發語言,其加密和解密技術在資料安全性方面具有重要意義。本文將介紹PHP中的加密和解密技術,並探討其在Web應用程式中的實際應用。

一、加密技術

加密技術是一種將普通文字轉換為加密文字的過程。在PHP中,加密技術主要應用於傳輸資料的安全性,例如使用者的登入資訊、交易資料等。 PHP中常見的加密技術如下:

  1. 雜湊加密

雜湊加密是將一個任意長度的輸入(又稱為訊息)透過特定演算法,轉換為固定長度的輸出,演算法滿足以下兩個條件:

a. 對於相同的輸入,演算法必須保證輸出相同;
b. 對於不同的輸入,演算法必須保證輸出不同。

PHP中的雜湊加密函數常用的有md5()、sha1()等。 md5()函數可以將任意長度的輸入字串轉換為一個128位元的輸出,並以32個十六進位字串的形式傳回。

例如,下面的程式碼可以將字串「Hello World」轉換為加密後的字串:

<?php
$orig_str = "Hello World";
$encrypted_str = md5($orig_str);
echo "加密前的字符串:$orig_str <br>";
echo "加密后的字符串:$encrypted_str";
?>
登入後複製
  1. 對稱加密

對稱加密是使用相同的金鑰對資料進行加密和解密的加密技術。在PHP中,使用mcrypt()函數進行對稱加密操作。 mcrypt()使用的是非常常見的加密演算法,如DES、TripleDES、Blowfish、AES等。

下面的程式碼示範如何使用mcrypt()函數進行對稱加密:

<?php
$key = '0123456789abcdef'; // 密钥
$input = 'Hello World'; // 加密前的字符串
$td = mcrypt_module_open('rijndael-128', '', 'cbc', ''); // 初始化加密模型
$iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND); // 初始化随机向量
mcrypt_generic_init($td, $key, $iv); // 初始化加密
$encrypted = mcrypt_generic($td, $input); // 进行加密操作
mcrypt_generic_deinit($td); // 结束加密
mcrypt_module_close($td); // 关闭加密模型
echo "加密前的字符串: $input <br>";
echo "加密后的字符串: ".base64_encode($encrypted)."<br>"; // 输出加密结果
?>
登入後複製
  1. 非對稱加密
##非對稱加密是一種使用不同的密鑰進行加密和解密的演算法。 PHP中常用的非對稱加密演算法是RSA。在使用RSA演算法進行加密和解密時,需要使用公鑰和私鑰兩個金鑰。一般情況下,公鑰是公開的,而私鑰只有持有者自己知道。

下面的程式碼示範了在PHP中使用RSA演算法進行加密和解密:

<?php
$data = 'Hello World';
// 生成RSA公钥,并将公钥保存到public.key文件中
$res = openssl_pkey_new();
openssl_pkey_export($res, $privkey); // 生成私钥并保存
$pubkey = openssl_pkey_get_details($res);
$pubkey = $pubkey["key"];
file_put_contents("public.key", $pubkey);
// 使用RSA公钥加密数据
openssl_public_encrypt($data, $encrypted, $pubkey);
echo "加密前的数据:$data <br>";
echo "加密后的数据:$encrypted <br>";
// 使用RSA私钥解密数据
openssl_pkey_get_private($privkey);
openssl_private_decrypt($encrypted, $decrypted, $privkey);
echo "解密后的数据:$decrypted <br>";
?>
登入後複製

二、解密技術

解密技術是對加密後的資料進行還原的過程。在PHP中,解密技術主要應用於傳輸資料的安全性,例如使用者的登入資訊、交易資料等。 PHP中常見的解密技術如下:

    哈希解密
哈希加密是一種不可逆的加密技術,無法進行解密操作。

    對稱解密
對稱解密是使用相同的金鑰對資料進行解密的加密技術。在PHP中,使用mcrypt()函數進行對稱解密運算。

下面的程式碼示範如何使用mcrypt()函數進行對稱解密:

<?php
$key = '0123456789abcdef'; // 密钥
$input = 'vO8v4zinwuL6qvtSRWdq3g=='; // 加密后的字符串
$td = mcrypt_module_open('rijndael-128', '', 'cbc', ''); // 初始化加密模型
$iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND); // 初始化随机向量
mcrypt_generic_init($td, $key, $iv); // 初始化加密
$decrypted = mdecrypt_generic($td, base64_decode($input)); // 进行解密操作
mcrypt_generic_deinit($td); // 结束加密
mcrypt_module_close($td); // 关闭加密模型
echo "解密前的字符串: $input <br>";
echo "解密后的字符串: $decrypted"; // 输出解密结果
?>
登入後複製

    非對稱解密
  1. ##非對稱解密是一種使用不同的密鑰進行加密和解密的演算法。在PHP中,常用的非對稱解密演算法是RSA。

下面的程式碼示範了在PHP中使用RSA演算法進行解密操作:

<?php
$data = 'Hello World';
// 使用RSA公钥加密数据
$pubkey = file_get_contents("public.key");
openssl_public_encrypt($data, $encrypted, $pubkey);
echo "加密前的数据:$data <br>";
echo "加密后的数据:$encrypted <br>";
// 使用RSA私钥解密数据
$privkey = file_get_contents("private.key");
openssl_private_decrypt($encrypted, $decrypted, $privkey);
echo "解密后的数据:$decrypted <br>";
?>
登入後複製

三、應用程式實例

#在實際Web開發中,加密和解密技術是保障資料安全的重要手段。以下將透過一個使用者登入應用程式實例,示範如何使用加密和解密技術來保護使用者的登入資訊。

前端表單
  1. 在前端頁面中,需要建立一個表單來取得使用者的登入資訊。表單中包含使用者名稱和密碼兩個輸入框:
<form method="post" action="login.php">
    <label>用户名:</label>
    <input type="text" name="username"><br>
    <label>密码:</label>
    <input type="password" name="password"><br>
    <input type="submit" value="登录">
</form>
登入後複製

#後台登入驗證
  1. 在PHP程式碼中,需要對使用者輸入的使用者名稱和密碼進行驗證。如果驗證通過,則可以將使用者加密後的資訊儲存到Session中,以供後續頁面使用。
<?php
session_start();
$username = $_POST['username'];
$password = $_POST['password'];
// 数据库连接等相关代码省略
// 检查用户名和密码是否匹配
if ($username == $db_username && $password == $db_password) {
    // 生成加密后的用户信息
    $userinfo = array(
        'username' => $username,
        'password' => $password
    );
    $encrypted = base64_encode(serialize($userinfo));
    // 将加密后的用户信息保存到Session中
    $_SESSION['userinfo'] = $encrypted;
    // 登录成功,跳转到首页
    header("Location: index.php");
} else {
    // 登录失败,返回错误消息
    echo "用户名或密码错误!";
}
?>
登入後複製

後台首頁
  1. 在後台首頁中,需要對Session中儲存的加密使用者資訊進行解密,並顯示使用者名稱等資訊。
<?php
session_start();
if (isset($_SESSION['userinfo'])) {
    // 从Session中获取加密后的用户信息
    $encrypted = $_SESSION['userinfo'];
    // 解密用户信息
    $userinfo = unserialize(base64_decode($encrypted));
    $username = $userinfo['username'];
    echo "欢迎您,$username!";
} else {
    // 用户未登录,跳转到登录页
    header("Location: login.php");
}
?>
登入後複製

綜上所述,加密和解密技術在PHP中具有重要的應用價值。在Web開發過程中,保障用戶資料的安全性是至關重要的,開發人員需要根據實際需求選擇合適的加密和解密技術來加強資料安全性。

以上是PHP中的加密與解密技術的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

PHP將行格式化為 CSV 並寫入檔案指針 PHP將行格式化為 CSV 並寫入檔案指針 Mar 22, 2024 am 09:00 AM

這篇文章將為大家詳細講解有關PHP將行格式化為CSV並寫入文件指針,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章後可以有所收穫。將行格式化為CSV並寫入檔案指標步驟1:開啟檔案指標$file=fopen(&quot;path/to/file.csv&quot;,&quot;w&quot;);步驟2:將行轉換為CSV字串使用fputcsv( )函數將行轉換為CSV字串。此函數接受以下參數:$file:檔案指標$fields:作為陣列的CSV欄位$delimiter:欄位分隔符號(可選)$enclosure:欄位引號(

PHP改變當前的 umask PHP改變當前的 umask Mar 22, 2024 am 08:41 AM

這篇文章將為大家詳細講解有關PHP改變當前的umask,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章後可以有所收穫。 PHP更改目前的umask概述umask是一個用於設定新建立的檔案和目錄的預設檔案權限的php函數。它接受一個參數,這是一個八進制數字,表示要阻止的權限。例如,要阻止對新建立的檔案進行寫入權限,可以使用002。更改umask的方法有兩種方法可以更改PHP中的目前umask:使用umask()函數:umask()函數直接變更目前umask。其語法為:intumas

PHP建立一個具有唯一檔案名稱的文件 PHP建立一個具有唯一檔案名稱的文件 Mar 21, 2024 am 11:22 AM

這篇文章將為大家詳細講解有關PHP建立一個具有唯一文件名的文件,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章後可以有所收穫。在PHP中建立唯一檔案名稱的檔案簡介在php中建立具有唯一檔案名稱的檔案對於組織和管理檔案系統至關重要。唯一文件名稱可確保不會覆蓋現有文件,並便於尋找和檢索特定文件。本指南將介紹在PHP中產生唯一檔案名稱的幾種方法。方法1:使用uniqid()函數uniqid()函數產生一個基於當前時間和微秒的唯一字串。此字串可以作為檔案名稱的基礎。

SEC前加密資產主管離職!駁斥加入Meme幣發行平台Pump.fun謠言 SEC前加密資產主管離職!駁斥加入Meme幣發行平台Pump.fun謠言 Jun 18, 2024 pm 07:53 PM

昨日,有關前證交會(SEC)加密資產主管DavidHirsch離職,而即將加入Meme幣發行平台Pump.fun團隊的傳言鬧得沸沸揚揚,據稱一切的謠言都始於Pump.fun在社群媒體X上一篇帶有嘲諷隱喻的推文,祝賀其擔任團隊的交易主管,相關內容甚至被各媒體轉發。 Pump.fun的以假亂真昨日(17)晚間,隨著Solana上Meme幣發行平台Pump.fun一篇推文的發布,有關前SEC加密資產兼網絡部門負責人Hirsch跳槽至Pump.fun平台的傳言便開始廣傳。幣安針對Pump.fun推文所

PHP計算檔案的 MD5 雜湊 PHP計算檔案的 MD5 雜湊 Mar 21, 2024 pm 01:42 PM

這篇文章將為大家詳細講解有關PHP計算文件的MD5散列,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章後可以有所收穫。 PHP計算檔案的MD5雜湊MD5(MessageDigest5)是一種單向加密演算法,可將任意長度的訊息轉換為固定長度的128位元雜湊值。它廣泛用於確保文件完整性、驗證資料真實性和建立數位簽章。在PHP中計算檔案的MD5雜湊php提供了多種方法來計算檔案的MD5雜湊:使用md5_file()函數md5_file()函數直接計算檔案的MD5雜湊值,傳回一個32個字元的

PHP傳回一個鍵值翻轉後的陣列 PHP傳回一個鍵值翻轉後的陣列 Mar 21, 2024 pm 02:10 PM

這篇文章將為大家詳細講解有關PHP返回一個鍵值翻轉後的數組,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章後可以有所收穫。 PHP鍵值翻轉數組鍵值翻轉是一種對數組進行的操作,它將數組中的鍵和值進行交換,產生一個新的數組,其中原始鍵作為值,原始值作為鍵。實作方法在php中,可以透過以下方法對陣列進行鍵值翻轉:array_flip()函數:array_flip()函數專門用於鍵值翻轉操作。它接收一個數組作為參數,並傳回一個新的數組,其中鍵和值已交換。 $original_array=[

PHP將檔案截斷到給定的長度 PHP將檔案截斷到給定的長度 Mar 21, 2024 am 11:42 AM

這篇文章將為大家詳細講解有關PHP將文件截斷到給定的長度,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章後可以有所收穫。 PHP檔案截斷簡介php中的file_put_contents()函數可用來將檔案截斷到指定長度。截斷是指刪除檔案末端的部分內容,從而縮短檔案長度。語法file_put_contents($filename,$data,SEEK_SET,$offset);$filename:要截斷的檔案路徑。 $data:要寫入檔案的空字串。 SEEK_SET:指定為檔案開始處

PHP判斷某個數組中是否存在指定的key PHP判斷某個數組中是否存在指定的key Mar 21, 2024 pm 09:21 PM

這篇文章將為大家詳細講解有關PHP判斷某個數組中是否存在指定的key,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章後可以有所收穫。 PHP判斷某個陣列中是否存在指定的key:在php中,判斷某個陣列中是否存在指定的key的方法有多種:1.使用isset()函數:isset($array[&quot;key&quot;])此函數傳回布林值,如果指定的key存在,則傳回true,否則傳回false。 2.使用array_key_exists()函數:array_key_exists(&quot;key&quot;,$arr

See all articles