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

MCrypt rijndael-256转OpenSSL aes-256-ecb的技术实现咨询

替换MCrypt为OpenSSL实现AES-256-ECB加密/解密

没问题,我帮你把基于MCrypt的加密逻辑转换成兼容PHP7.2+的OpenSSL实现,完美匹配你原来的功能:

先分析原代码的核心逻辑

你原来的代码用的是MCRYPT_RIJNDAEL_256(块大小256位)+ ECB模式,密钥使用指定的salt(默认DiAo74dOO09T48YESmuvbS0T),加密后做Base64编码。由于MCrypt已被弃用,我们用OpenSSL的rijndael-256算法来对应(注意:OpenSSL里的aes-256-ecb是块大小128位的标准AES,和你原来的MCRYPT_RIJNDAEL_256块大小不同,所以必须用rijndael-256)。

替换后的完整代码

// 加密函数
function encrypt($text, $salt = '') {
    if ($text === "") {
        return "";
    }
    // 使用原默认密钥
    if ($salt === "") {
        $salt = 'DiAo74dOO09T48YESmuvbS0T';
    }
    
    // RIJNDAEL_256的块大小是32字节,需要手动零填充到块大小的整数倍
    $blockSize = 32;
    $textLength = strlen($text);
    $padding = $blockSize - ($textLength % $blockSize);
    $text .= str_repeat("\0", $padding);
    
    // OpenSSL加密:rijndael-256算法,ECB模式,原始输出+零填充
    $encrypted = openssl_encrypt(
        $text,
        'rijndael-256',
        $salt,
        OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING,
        '' // ECB模式不需要IV,传空字符串即可
    );
    
    // 最后做Base64编码,和原逻辑一致
    return trim(base64_encode($encrypted));
}

// 解密函数
function decrypt($encryptedText, $salt = '') {
    if ($encryptedText === "") {
        return "";
    }
    if ($salt === "") {
        $salt = 'DiAo74dOO09T48YESmuvbS0T';
    }
    
    // 先Base64解码
    $encrypted = base64_decode($encryptedText);
    
    // OpenSSL解密:对应加密的参数
    $decrypted = openssl_decrypt(
        $encrypted,
        'rijndael-256',
        $salt,
        OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING,
        ''
    );
    
    // 移除末尾的零填充
    return rtrim($decrypted, "\0");
}

关键注意点

  • 算法匹配:必须用rijndael-256而不是aes-256-ecb,因为原MCrypt用的是256位块大小的Rijndael,标准AES的块大小固定为128位,两者不兼容。
  • 填充处理:MCrypt默认用零填充,而OpenSSL默认用PKCS7填充,所以我们手动做零填充并指定OPENSSL_ZERO_PADDING选项,保证加密结果和原代码完全一致。
  • ECB模式风险:ECB模式是不安全的(相同明文会生成相同密文),如果你的业务场景允许,建议后续升级为CBC或GCM模式(需要添加IV向量,更安全)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:23:12