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

PHP 基於 MD5 的可逆加密解密算法實現與安全性分析

     編輯:PHP 綜合知識

算法原理

本文演示一種「偽加密」算法:密鑰派生 + 字節級異或變體。非標準加密,不可用於生產敏感數據,僅供教學理解對稱加密基本結構。

代碼實現



安全性深度分析 ⚠️

維度評估風險
密鑰空間MD5 輸出 128bit,但實際密鑰流僅 32 字節循環🔴 極低,已知明文攻擊輕鬆破解
算法類型流密碼變體(加法模 256)🔴 無擴散性,單字節修改只影響對應密文字節
完整性無 MAC/認證標籤🔴 密文可被任意篡改,解密後無法檢測
重放攻擊無 Nonce/IV🔴 相同明文+密鑰 → 相同密文,語義洩露
側信道PHP 字符串操作計時可被分析🟡 中等
標準合規非任何標準算法🔴 不可審計、不可合規

生產環境必用的標準方案

1. OpenSSL AES-256-GCM(推薦,PHP 7.1+)

function aesEncrypt(string $data, string $key): string {
    $key = hash('sha256', $key, true); // 32 字節密鑰
    $iv = random_bytes(12);            // 96-bit GCM 標準 IV
    $tag = '';
    $encrypted = openssl_encrypt($data, 'aes-256-gcm', $key, OPENSSL_RAW_DATA, $iv, $tag, '', 12);
    return base64_encode($iv . $tag . $encrypted);
}

function aesDecrypt(string $payload, string $key): string {
    $key = hash('sha256', $key, true);
    $raw = base64_decode($payload);
    $iv = substr($raw, 0, 12);
    $tag = substr($raw, 12, 16);
    $encrypted = substr($raw, 28);
    return openssl_decrypt($encrypted, 'aes-256-gcm', $key, OPENSSL_RAW_DATA, $iv, $tag, '', 12);
}

2. Sodium (libsodium) — 現代加密標準庫(PHP 7.2+)

function sodiumEncrypt(string $data, string $key): string {
    $key = sodium_crypto_secretbox_keygen(); // 或從密碼派生
    $nonce = random_bytes(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES);
    $cipher = sodium_crypto_secretbox($data, $nonce, $key);
    return base64_encode($nonce . $cipher);
}

function sodiumDecrypt(string $payload, string $key): string {
    $raw = base64_decode($payload);
    $nonce = substr($raw, 0, SODIUM_CRYPTO_SECRETBOX_NONCEBYTES);
    $cipher = substr($raw, SODIUM_CRYPTO_SECRETBOX_NONCEBYTES);
    return sodium_crypto_secretbox_open($cipher, $nonce, $key);
}

3. 密碼派生:Argon2id(PHP 7.2+)

$hash = password_hash($password, PASSWORD_ARGON2ID); // 存儲
$valid = password_verify($password, $hash);          // 驗證

在線工具推薦(文中引用)

結語

文中 MD5 加密算法僅供教學演示對稱加密結構,**嚴禁用於真實業務**。生產環境請直接使用 OpenSSL AES-GCM 或 Sodium,配合 Argon2id 密碼派生、隨機 IV/Nonce、認證加密,才能構建安全的數據保護體系。

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