PHP 使用 Mcrypt 实现 DES 加密解密(兼容旧版)

纸上星河
纸上星河
发布时间:2026-10-13 | 4人浏览过
原创

了解如何使用 PHP 的 mcrypt 扩展对数据进行 DES 对称加密与解密,包括完整的密钥处理、PKCS 填充逻辑及代码示例。

准备条件

在进行 DES 加密解密前,请确保环境满足以下要求:

  1. 启用扩展:服务器必须安装并启用了 PHP 的 mcrypt 扩展。
  2. 密钥安全:DES 算法要求密钥长度固定为 8 个字节。请妥善保管密钥,避免泄露。
  3. 模式选择:本示例采用 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 数据安全的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表