php实现desede
PHP 实现 3DES 加密
3DES(Triple DES)是一种对称加密算法,通过对 DES 算法进行三次加密来提高安全性。在 PHP 中可以使用 mcrypt 或 openssl 扩展实现 3DES 加密。由于 mcrypt 扩展在 PHP 7.1 后被废弃,推荐使用 openssl 扩展。

使用 OpenSSL 扩展实现 3DES
确保 PHP 已安装 OpenSSL 扩展,可以通过 phpinfo() 查看是否已启用。

// 3DES 加密
function encrypt3DES($data, $key) {
$method = 'DES-EDE3-CBC';
$iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length($method));
$encrypted = openssl_encrypt($data, $method, $key, OPENSSL_RAW_DATA, $iv);
return base64_encode($iv . $encrypted);
}
// 3DES 解密
function decrypt3DES($data, $key) {
$data = base64_decode($data);
$method = 'DES-EDE3-CBC';
$ivLength = openssl_cipher_iv_length($method);
$iv = substr($data, 0, $ivLength);
$encrypted = substr($data, $ivLength);
return openssl_decrypt($encrypted, $method, $key, OPENSSL_RAW_DATA, $iv);
}
// 示例用法
$key = '0123456789abcdef0123456789abcdef0123456789abcdef'; // 24 字节的密钥
$plaintext = 'Hello, 3DES!';
$encrypted = encrypt3DES($plaintext, $key);
$decrypted = decrypt3DES($encrypted, $key);
echo "Plaintext: $plaintext\n";
echo "Encrypted: $encrypted\n";
echo "Decrypted: $decrypted\n";
使用 Mcrypt 扩展实现 3DES(不推荐)
如果仍在使用 PHP 7.1 以下版本,可以使用 mcrypt 扩展。
// 3DES 加密
function encrypt3DES($data, $key) {
$ivSize = mcrypt_get_iv_size(MCRYPT_3DES, MCRYPT_MODE_CBC);
$iv = mcrypt_create_iv($ivSize, MCRYPT_RAND);
$encrypted = mcrypt_encrypt(MCRYPT_3DES, $key, $data, MCRYPT_MODE_CBC, $iv);
return base64_encode($iv . $encrypted);
}
// 3DES 解密
function decrypt3DES($data, $key) {
$data = base64_decode($data);
$ivSize = mcrypt_get_iv_size(MCRYPT_3DES, MCRYPT_MODE_CBC);
$iv = substr($data, 0, $ivSize);
$encrypted = substr($data, $ivSize);
return mcrypt_decrypt(MCRYPT_3DES, $key, $encrypted, MCRYPT_MODE_CBC, $iv);
}
// 示例用法
$key = '0123456789abcdef0123456789abcdef'; // 16 或 24 字节的密钥
$plaintext = 'Hello, 3DES!';
$encrypted = encrypt3DES($plaintext, $key);
$decrypted = decrypt3DES($encrypted, $key);
echo "Plaintext: $plaintext\n";
echo "Encrypted: $encrypted\n";
echo "Decrypted: $decrypted\n";
注意事项
- 密钥长度应为 24 字节(192 位),但某些实现也支持 16 字节(128 位)密钥。
- 初始化向量(IV)应为 8 字节(64 位)。
- 使用 CBC 模式时,IV 应是随机且唯一的。
- 加密后的数据通常需要 Base64 编码以便存储或传输。
- 确保密钥的安全存储,避免硬编码在代码中。






