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
相关产品推荐
相关产品推荐

