PHP 使用 Mcrypt 实现 DES 加密解密(兼容旧版)
了解如何使用 PHP 的 mcrypt 扩展对数据进行 DES 对称加密与解密,包括完整的密钥处理、PKCS 填充逻辑及代码示例。
准备条件
在进行 DES 加密解密前,请确保环境满足以下要求:
- 启用扩展:服务器必须安装并启用了 PHP 的
mcrypt扩展。 - 密钥安全:DES 算法要求密钥长度固定为 8 个字节。请妥善保管密钥,避免泄露。
- 模式选择:本示例采用 ECB 模式,适用于简单的数据块加密,但在处理敏感信息时建议考虑 CBC 等更安全的模式。
第1步:实现 DES 加密函数
加密的核心在于对原始数据进行填充,使其长度成为块大小的整数倍。DES 的块大小为 8 字节。
function des_encrypt($str, $key) {
// 获取 DES 的块大小
$block = mcrypt_get_block_size('des', 'ecb');
// PKCS7 填充:计算需要填充的字节数
$pad = $block - (strlen($str) % $block);
// 追加填充字符(值为 pad 的 ASCII 码)
$str .= str_repeat(chr($pad), $pad);
// 执行加密,返回二进制密文
return mcrypt_encrypt(MCRYPT_DES, $key, $str, MCRYPT_MODE_ECB);
}
第2步:实现 DES 解密函数
解密过程首先还原明文,然后去除末尾的填充字符。
function des_decrypt($str, $key) {
// 执行解密,还原填充后的字符串
$str = mcrypt_decrypt(MCRYPT_DES, $key, $str, MCRYPT_MODE_ECB);
$len = strlen($str);
$block = mcrypt_get_block_size('des', 'ecb');
// 读取最后一个字符,确定填充长度
$pad = ord($str[$len - 1]);
// 截取有效明文,去除填充部分
return substr($str, 0, $len - $pad);
}
注意事项
- 密文编码:上述函数直接处理二进制数据。如果用于网页传输或存储,建议使用
base64_encode()和base64_decode()将密文转换为可打印字符串。 - 版本兼容
mcrypt扩展已在 PHP 7.1.0 中被废弃,并在 PHP 7.2.0 中移除。高版本 PHP 请使用openssl扩展或第三方库代替。
完成判断
编写完成后,可通过构造测试用例验证:对同一字符串在相同密钥下分别调用加密和解密,检查最终输出是否与原始输入一致。
以上就是PHP 使用 Mcrypt 实现 DES 加密解密的详细内容,更多关于PHP 数据安全的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













