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

PHP 可逆加密類實現:基於 XOR 與隨機密鑰流的對稱加密示例

     編輯:PHP 相關知識

本文分析一個基於 XOR 運算和動態密鑰流的可逆加密類,展示其原理、代碼結構,並指出其安全局限性與現代替代方案。

算法原理解析

  1. 密鑰派生:md5(rand(0,32000)) 生成 32 字符十六進制隨機密鑰流 $encrypt_key。
  2. 加密:明文每字節與密鑰流對應字節 XOR,並將密鑰流字節**穿插**在密文字節前(密文長度變為 2x)。
  3. 二次混淆:用用戶提供的密鑰 $key(經 md5)對上述結果再次 XOR(keyED 方法)。
  4. 解密:逆向操作——先用 $key 解混淆,再按「取密鑰流字節 → XOR 還原明文字節」還原。

核心代碼結構

class Crypt {
    protected $key = '';
    
    private function keyED($txt, $encrypt_key) { /* XOR 混淆 */ }
    
    public function encrypt($txt, $key = '') { /* 生成隨機流、穿插 XOR、二次混淆 */ }
    public function decrypt($txt, $key = '') { /* 逆向還原 */ }
    public function setKey($key) { $this->key = $key; }
    public function getKey() { return $this->key; }
}

安全性評估

維度評價風險
算法類型流密碼(XOR)已知明文攻擊可恢復密鑰流
隨機源rand() + md5()不可預測性極弱,PHP 7.1+ rand() 為偽隨機,不宜用於加密
密鑰管理硬編碼/傳遞明文密鑰無密鑰派生函數(KDF),無鹽值,無輪換機制
完整性校驗無密文可被篡改且解密不報錯
初始化向量無相同明文+密鑰產生完全相同密文,洩露模式

結論:此類僅適合**教學演示、極低敏感度數據混淆**(如隱藏內部 ID、簡單 Token 混淆),嚴禁用於:用戶密碼、支付信息、個人隱私、API 簽名、任何合規要求加密的場景。

生產環境標準替代:OpenSSL AES-256-GCM

function encryptModern(string $data, string $key): string {
    $iv = random_bytes(12); // 96-bit IV for GCM
    $ciphertext = openssl_encrypt($data, 'aes-256-gcm', $key, OPENSSL_RAW_DATA, $iv, $tag);
    // 存儲格式:IV(12) + TAG(16) + CIPHERTEXT
    return base64_encode($iv . $tag . $ciphertext);
}

function decryptModern(string $payload, string $key): ?string {
    $raw = base64_decode($payload);
    if (strlen($raw) < 28) return null;
    $iv = substr($raw, 0, 12);
    $tag = substr($raw, 12, 16);
    $ciphertext = substr($raw, 28);
    return openssl_decrypt($ciphertext, 'aes-256-gcm', $key, OPENSSL_RAW_DATA, $iv, $tag);
}

// 密鑰派生(從密碼)
$key = hash_pbkdf2('sha256', $password, $salt, 100000, 32, true);

最佳實踐清單

  • 使用 random_bytes() 生成 IV/鹽值(CSPRNG)。
  • 採用認證加密模式(GCM/CCM/ChaCha20-Poly1305),同時保證機密性與完整性。
  • 密鑰由 KDF(PBKDF2/Argon2/scrypt)從主密鑰/密碼派生,定期輪換。
  • 密文格式標準化:版本|鹽值|IV|TAG|密文,支持算法升級。
  • 考慮使用成熟庫:paragonie/halite、defuse/php-encryption、Laravel Encrypter。

理解經典 XOR 加密原理是學習現代密碼學的入門,但生產代碼請擁抱經過學術界驗證、工程界檢驗的標準庫與算法。

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