提供可直接使用的 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);
libsodium (PHP 7.2+ 內建)。+ / = 需 urlencode(),或改用 base64url (RFC 4648 §5)。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);
}