🗣 Wd提问: DES加密PHP源码
🤖 Ai回答: DES(Data Encryption Standard)是一种对称加密算法,虽然由于其密钥长度较短(56位),现在已不推荐用于高安全性场景,但在一些旧系统或特定需求中仍可能用到。
在 PHP 中,可以使用 `mcrypt` 扩展或更现代的 `openssl` 扩展来实现 DES 加密。注意:`mcrypt` 已被废弃(自 PHP 7.1 起移除),因此推荐使用 `openssl`。
下面是一个使用 OpenSSL 实现 DES 加密和解密的 PHP 示例源码:
✅ PHP DES 加密/解密示例(使用 OpenSSL)
php
<?php
class DES {
private $key;
private $iv;
private $method = 'DES-CBC'; // 使用 DES 的 CBC 模式
public function __construct($key, $iv = null) {
$this-key = $key;
// IV 长度需为 8 字节(DES 块大小)
$this-iv = $iv ?: str_repeat(\0, 8); // 默认使用全零 IV
}
/**
* 加密字符串
* @param string $plaintext 明文
* @return string Base64 编码的密文
*/
public function encrypt($plaintext) {
// 补齐数据(PKCS5/PKCS7 填充)
$blockSize = 8; // DES 块大小为 8 字节
$pad = $blockSize (strlen($plaintext) % $blockSize);
$plaintext .= str_repeat(chr($pad), $pad);
$ciphertext = openssl_encrypt(
$plaintext,
$this-method,
$this-key,
OPENSSL_RAW_DATA | OPENSSL_NO_PADDING, // 我们自己处理填充
$this-iv
);
return base64_encode($ciphertext);
}
/**
* 解密字符串
* @param string $ciphertext Base64 编码的密文
* @return string|false 解密后的明文,失败返回 false
*/
public function decrypt($ciphertext) {
$ciphertext = base64_decode($ciphertext);
$plaintext = openssl_decrypt(
$ciphertext,
$this-method,
$this-key,
OPENSSL_RAW_DATA | OPENSSL_NO_PADDING,
$this-iv
);
if ($plaintext === false) {
return false;
}
// 移除 PKCS5/PKCS7 填充
$pad = ord($plaintext[strlen($plaintext) 1]);
return substr($plaintext, 0, -$pad);
}
}
// ================== 使用示例 ==================
$key = '12345678'; // 注意:DES 密钥必须是 8 字节
$iv = 'abcdefgh'; // 可选,8 字节初始化向量,可设为 null 使用默认 \0\0\0\0\0\0\0\0
$des = new DES($key, $iv);
$original = Hello, this is a secret message!;
echo 原文: 、$original 、\n;
$encrypted = $des-encrypt($original);
echo 密文: 、$encrypted 、\n;
$decrypted = $des-decrypt($encrypted);
echo 解密: 、$decrypted 、\n;
?
🔐 注意事项:
1、密钥长度:DES 要求密钥为 8 字节(64位,实际有效 56 位)。
2、IV(初始化向量):CBC 模式需要一个 8 字节的 IV,建议随机生成并安全传输。
3、填充方式:本例使用 PKCS5/PKCS7 填充(与块密码兼容)。
4、安全性提醒:
DES 已被认为不安全,建议使用 3DES 或 AES。
若需更强加密,请改用 `AES-256-CBC` 等算法。
✅ 推荐升级到 AES 示例(更安全)
php
// 更安全的替代方案:AES-128-CBC
$method = 'AES-128-CBC';
$key = '16ByteLongKey!!'; // 16 字节
$iv = openssl_random_pseudo_bytes(16);
$ciphertext = openssl_encrypt($plaintext, $method, $key, OPENSSL_RAW_DATA, $iv);
$encoded = base64_encode($iv 、$ciphertext); // 将 IV 一起保存
如你有特殊需求必须使用 DES(例如对接老系统),上述代码可直接使用。欢迎继续提问关于 3DES、ECB 模式或其他编码问题。
📣 商家广告:





0
IP地址: 94.250.204.17
搜索次数: 0
提问时间: 2025-11-10 16:02:39
🛒 域名购买:
jldj.cn
792.net.cn
363.net.cn
wq.gs
cisou.com.cn
sssp.net
ltqz.cn
4448.com.cn
3qk.cn
g-a.com.cn
❓️ 热门提问:
香港云服务器云
1米6机柜
动态 ip 池
手机虚拟空间
ddos高防服务
机房建设要求吗
国外云服务器上网
云计算对学历要求
vpswindows俄罗斯
wap网页制作
豌豆Ai站群搜索引擎系统
🌐 域名评估:
663.net.cn
tongyi.com
jd.com
cwks.cn
si.tw.cn
00l.ee
qget.cn
uyyc.cn
f.xj.cn
su.xj.cn
⛏ 最新挖掘:
凯里酸汤鱼
贵阳烤脑花
都匀毛尖茶
花溪牛肉粉
贵阳烤生蚝
贵阳烤豆腐
贵阳纸包鱼
贵阳特色菜
🖌 热门作画:
🤝 关于我们:
豌豆Ai
域名
建站
站群
留痕
推广
评估
源码
开发Ai
工具
日记
价格
加盟
广告
流量
留言
联系
🗨 加入群聊:
🔗 友情链接:
网站搜索引擎入口
한국 검색 엔진
ai提问
🧰 站长工具:
Ai工具 whois查询 搜索
📢 温馨提示:本站所有问答由Ai自动创作,内容仅供参考,若有误差请用“联系”里面信息通知我们人工修改或删除。
👉 技术支持:本站由豌豆Ai提供技术支持,使用的最新版:《豌豆Ai站群搜索引擎系统 V.25.10.25》搭建本站。