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

PHP 實現 DES 加密解密:ECB 模式完整範例

     編輯:PHP 綜合知識

前言

DES (Data Encryption Standard) 是一種經典的對稱加密演算法,雖然目前已不建議用於高安全性場景(密鑰長度僅 56 位),但在部分舊系統整合或特定協議要求下仍有應用。本文提供 PHP 實現 DES 加解密的簡潔範例,採用 ECB 模式並處理 PKCS#5/PKCS#7 填充。

DES 加密函數

/**
 * DES 加密 (ECB 模式)
 * @param string $str  待加密字串
 * @param string $key  8 位元組密鑰
 * @return string      加密後的二進位資料
 */
function des_encrypt($str, $key) {
    // 獲取區塊大小 (DES 為 8 bytes)
    $block = mcrypt_get_block_size('des', 'ecb');
    
    // PKCS#5/PKCS#7 填充
    $pad = $block - (strlen($str) % $block);
    $str .= str_repeat(chr($pad), $pad);
    
    // 加密
    return mcrypt_encrypt(MCRYPT_DES, $key, $str, MCRYPT_MODE_ECB);
}

DES 解密函數

/**
 * DES 解密 (ECB 模式)
 * @param string $str  加密後的二進位資料
 * @param string $key  8 位元組密鑰
 * @return string      解密後的原始字串
 */
function des_decrypt($str, $key) {
    // 解密
    $str = mcrypt_decrypt(MCRYPT_DES, $key, $str, MCRYPT_MODE_ECB);
    
    // 移除填充
    $len = strlen($str);
    $block = mcrypt_get_block_size('des', 'ecb');
    $pad = ord($str[$len - 1]);
    
    return substr($str, 0, $len - $pad);
}

完整測試範例

重要安全提醒

⚠️ 安全性警告

  • DES 已不安全:56 位有效密鑰長度可在數小時內被暴力破解,嚴禁用於新系統的敏感資料保護。
  • ECB 模式缺陷:相同明文區塊產生相同密文,無法隱藏資料模式,極易遭受重放與模式分析攻擊。
  • mcrypt 已移除:PHP 7.2+ 已移除 mcrypt 擴展。

現代替代方案

方案PHP 版本特點
openssl_encrypt (AES-256-GCM) PHP 5.3+ 硬體加速、認證加密、廣泛支援
sodium_crypto_aead_xchacha20poly1305_ietf_encrypt PHP 7.2+ 現代加密、抗旁路攻擊、API 簡潔
defuse/php-encryption (Composer 套件) PHP 5.6+ 純 PHP 實現、無需擴展、經過安全審計

AES-256-GCM 範例 (推薦用於新專案)

相關線上工具

延伸閱讀

更多 PHP 相關內容可參考本站專題:《PHP 加密方法總結》、《PHP 運算與運算符用法總結》、《PHP 網絡編程技巧總結》、《PHP 基本語法入門教程》、《PHP 面向對象程序設計入門教程》、《PHP 字符串用法總結》、《PHP+MySQL 數據庫操作入門教程》及《PHP 常見數據庫操作技巧匯總》。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved