首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP Mcrypt 擴展庫安裝與加密解密實戰:DES、AES 等演算法完整指南

     編輯:PHP 相關知識

一、安裝步驟 (Windows 環境)

  1. 將 PHP 目錄下的 libmcrypt.dll、libmhash.dll 複製到 C:\Windows\System32。
  2. 編輯 php.ini,移除下列兩行前的分號:
    extension=php_mcrypt.dll
    extension=php_mhash.dll
  3. 重啟 Apache,透過 phpinfo() 確認 mcrypt 區塊已載入。

二、支援的演算法與模式

可透過 mcrypt_list_algorithms()、mcrypt_list_modes() 動態取得。常用常數對照:

  • 演算法:MCRYPT_DES、MCRYPT_RIJNDAEL_128 (AES)、MCRYPT_TRIPLEDES、MCRYPT_BLOWFISH 等。
  • 模式:MCRYPT_MODE_ECB、MCRYPT_MODE_CBC、MCRYPT_MODE_CFB、MCRYPT_MODE_OFB 等。

三、完整加密解密流程範例

<?php
$plaintext = '我的名字是?一般人我不告訴他!';
$key       = 'key:111';           // 密鑰
$cipher    = MCRYPT_RIJNDAEL_128; // AES-128
$mode      = MCRYPT_MODE_CBC;     // CBC 模式較 ECB 安全

// 1. 建立初始化向量 (IV)
$ivSize = mcrypt_get_iv_size($cipher, $mode);
$iv     = mcrypt_create_iv($ivSize, MCRYPT_DEV_URANDOM);

// 2. 加密
$ciphertext = mcrypt_encrypt($cipher, $key, $plaintext, $mode, $iv);

// 3. 儲存/傳輸時建議將 IV + 密文以 Base64 編碼
$encoded = base64_encode($iv . $ciphertext);
echo "加密結果: $encoded\n";

// --- 解密端 ---
$decoded = base64_decode($encoded);
$ivDec   = substr($decoded, 0, $ivSize);
$cipherDec = substr($decoded, $ivSize);

$decrypted = mcrypt_decrypt($cipher, $key, $cipherDec, $mode, $ivDec);
// 去除 PKCS#7 padding
$decrypted = rtrim($decrypted, "\0");
echo "解密結果: $decrypted\n";
?>

四、關鍵函式說明

函式用途
mcrypt_get_iv_size()取得指定演算法/模式所需 IV 長度
mcrypt_create_iv()產生隨機 IV,建議使用 MCRYPT_DEV_URANDOM
mcrypt_encrypt()加密,參數:演算法、金鑰、明文、模式、IV
mcrypt_decrypt()解密,參數同加密,明文改為密文

五、重要提醒

  • 金鑰長度 必須符合演算法要求(如 AES-128 需 16 位元組),不足會被補零,過長會截斷。
  • ECB 模式不安全(相同明文區塊產生相同密文),生產環境請使用 CBC、CTR 等模式並妥善管理 IV。
  • PHP 7.1+ 已棄用 Mcrypt,建議改用 openssl_encrypt()/openssl_decrypt() 或 sodium 擴展。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved