You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP中使用OpenSSL实现DES加密解密:加密功能异常问题

问题分析与修复方案

问题根源

你的加密函数存在两个关键错误:

  • 处理顺序颠倒:你先对明文做base64编码再加密,但解密流程是先解密base64解码后的密文。正确逻辑应该是:加密时先对明文加密,再对加密后的二进制密文做base64编码;解密时先对base64字符串解码,再解密得到明文。
  • 变量命名混淆:用$opensslDecrypt存储加密结果,属于命名错误,虽不影响功能但降低代码可读性。

修复后的加密函数

function encrypt()
{
    $password = 'thisIsASecretKey';
    $plainString = '123123123'; // sample
    // 先加密明文,再对加密后的二进制数据做base64编码
    $opensslEncrypt = openssl_encrypt($plainString, 'DES-ECB', $password, OPENSSL_RAW_DATA);
    $encryptedBase64 = base64_encode($opensslEncrypt);
    print("\nThe encrypted string: " . $encryptedBase64); // 输出预期结果: YbpeWd70LAxTCQvZjNlnwQ==
}

补充说明

  • DES算法要求密钥长度固定为8字节(64位),你的密码thisIsASecretKey会被OpenSSL自动截断为前8字节thisIsA,这与解密时的密钥处理逻辑一致,因此不影响当前功能;若需要更长密钥,建议改用3DES或AES算法。
  • ECB模式无需IV向量,你的代码中最后一个参数传空字符串的写法是正确的,也可以直接省略该参数。

内容的提问来源于stack exchange,提问作者anoopKumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 05:10:23