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

PHP 字串加密與解密函數 (MCrypt CAST-256 CFB + Base64)

     編輯:PHP 相關知識

提供可直接使用的 encrypt()/decrypt() 函數對,採用 MCrypt CAST-256 CFB 模式,金鑰衍生自 MD5,輸出 Base64 編碼,適合 URL 參數傳遞、API 簽名、敏感資料儲存等場景。

加密函數

function encrypt($key, $plain_text) {
    $plain_text = trim($plain_text);
    $iv = substr(md5($key), 0, mcrypt_get_iv_size(MCRYPT_CAST_256, MCRYPT_MODE_CFB));
    $c_t = mcrypt_cfb(MCRYPT_CAST_256, $key, $plain_text, MCRYPT_ENCRYPT, $iv);
    return trim(chop(base64_encode($c_t)));
}

解密函數

function decrypt($key, $c_t) {
    $c_t = trim(chop(base64_decode($c_t)));
    $iv = substr(md5($key), 0, mcrypt_get_iv_size(MCRYPT_CAST_256, MCRYPT_MODE_CFB));
    $p_t = mcrypt_cfb(MCRYPT_CAST_256, $key, $c_t, MCRYPT_DECRYPT, $iv);
    return trim(chop($p_t));
}

使用範例

$key = 'MySecretKey2024';
$original = 'user_id=123&action=delete';
$encrypted = encrypt($key, $original); // 傳遞前 urlencode()
$decrypted = decrypt($key, $encrypted);

重要安全提醒 (必讀)

  • MCrypt 已棄用:PHP 7.1 棄用,7.2 移除。新專案禁用。
  • 現代替代:OpenSSL (AES-256-GCM) 或 libsodium (PHP 7.2+ 內建)。
  • 金鑰管理:勿硬編碼金鑰,使用環境變數、金鑰管理服務 (HashiCorp Vault, AWS KMS)。
  • 認證加密:CFB 無完整性驗證,易受填充神諭攻擊。GCM/ChaCha20-Poly1305 同時提供機密性與完整性。
  • URL 傳遞:Base64 含 + / = 需 urlencode(),或改用 base64url (RFC 4648 §5)。

OpenSSL AES-256-GCM 範例 (推薦)

function encrypt_modern($key, $data) {
    $iv = random_bytes(12); // GCM 建議 96-bit IV
    $ct = openssl_encrypt($data, 'aes-256-gcm', $key, OPENSSL_RAW_DATA, $iv, $tag);
    return base64_encode($iv . $tag . $ct);
}
function decrypt_modern($key, $payload) {
    $raw = base64_decode($payload);
    $iv = substr($raw, 0, 12);
    $tag = substr($raw, 12, 16);
    $ct = substr($raw, 28);
    return openssl_decrypt($ct, 'aes-256-gcm', $key, OPENSSL_RAW_DATA, $iv, $tag);
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved