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

PHP5.6 AES加密代码升级适配PHP7.3及PHP加密学习咨询

PHP 5.6 AES加密代码升级PHP7.3适配方案及学习建议

核心适配说明

PHP 7.1起已废弃mcrypt扩展,PHP7.3版本已完全移除该扩展,原有加密逻辑需替换为官方推荐的openssl扩展实现,适配时保持原有加密逻辑、输出结果完全兼容。

适配后完整代码

function generateRandomString($length = 10)
{
    $characters       = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $charactersLength = strlen($characters);
    $randomString     = '';
    for($i = 0; $i < $length; $i++)
    {
        // 替换rand为PHP7+支持的加密安全随机数生成器
        $randomString .= $characters[random_int(0, $charactersLength - 1)];
    }
    return $randomString;
}

// 原有逻辑保持兼容,也可直接替换为strtoupper(bin2hex($string))实现同等效果,执行效率更高
function strToHex($string)
{
    $hex = '';
    for($i = 0; $i < strlen($string); $i++)
    {
        $ord     = ord($string[$i]);
        $hexCode = dechex($ord);
        $hex     .= substr('0' . $hexCode, -2);
    }
    return strToUpper($hex);
}

function AESencrypt($decrypted, $password = 'password', $salt = 'salt_key')
{
    $block     = 16; // AES-128块大小固定为16字节,替代废弃的mcrypt_get_block_size
    $padding   = $block - (strlen($decrypted) % $block);
    $decrypted .= str_repeat(chr($padding), $padding);
    // 替换废弃的mcrypt_encrypt为openssl_encrypt,参数对齐原有逻辑保证加密结果一致
    $encrypted = base64_encode(openssl_encrypt($decrypted, 'AES-128-CBC', $password, OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING, $password));
    $encrypted = hash('SHA256', $encrypted . '|' . $salt, true);
    return strToHex($encrypted);
}

$agentid   = "EU01EU22INB000";
$mercode   = "BPP";
$username  = "BPP_01";
$userpass  = "BPP_01";
$storecode = "BPP_01";
$ipaddr    = "103.235.104.168";
$billerid    = '00000NATTQ';
$bbpstel     = 'QH01WD3737';
$bbpstel1    = $bbpstel;
$stringParts = str_split($bbpstel1);
sort($stringParts);
$sortval = implode('', $stringParts);
$sort = $sortval;
$Billfetch = "BillPay" . generateRandomString();

$hashkey   = AESencrypt($Billfetch . "|" . $mercode . "|" . $agentid . "|" . $billerid . "|" . $sort, "password", "salt_key");
echo $Billfetch."----".$hashkey."<br/>";
exit;

PHP加密相关学习建议

  • 优先掌握openssl扩展:PHP7+官方唯一推荐的加密扩展,覆盖对称加密、非对称加密、哈希计算、签名验签等全场景,无需依赖第三方或已废弃扩展
  • 理清基础加密概念:掌握AES加密的模式(CBC/ECB/GCM等)、块大小、密钥长度、IV向量作用、填充规则(PKCS7/ZeroPadding等)、哈希算法特性,避免乱用参数导致加密不安全
  • 兼容性对齐规则:不同版本、不同语言加密互通的核心是算法、密钥、IV、填充方式、输出编码(base64/hex/二进制)五个参数完全一致,适配时逐一核对即可避免加密结果不一致的问题
  • 安全最佳实践:不要硬编码密钥、盐到业务代码;IV需随机生成并和密文一起存储传输;加密场景不要用弱随机数生成器(如rand()仅适合业务随机场景);敏感数据优先用AEAD模式(如AES-GCM)同时完成加密和完整性校验
  • 哈希使用规范:密码存储不要用普通哈希,要用password_hash()/password_verify()专用函数;完整性校验优先选HMAC而非自行拼接盐做哈希,避免长度扩展攻击

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 08:30:00