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

PHP解密加密邮箱函数末尾字符缺失:Python转PHP逻辑排查

问题分析与修复方案

嘿,我一眼就看到问题出在哪了,咱们一步步拆解你的PHP函数和原Python逻辑的差异:

核心错误点1:foreach循环的变量搞反了

原Python代码里,range(2, len(e)-1, 2)生成的是从2开始、步长为2的起始位置序列,循环变量i直接就是每次截取字符串的起始索引。但你的PHP代码里,foreach(range(...) as $i => $v)中,$i是数组的索引(从0开始递增的数字),而$v才是对应Python里i的真实起始位置!你错误地用$i去做字符串截取,这直接导致起始位置完全跑偏。

核心错误点2:substr的参数逻辑错误

Python的e[i:i+2]是从位置i开始,取固定2个字符;而PHP的substr($e, $start, $length)第三个参数是截取长度,不是结束位置。你写的substr($e,$i,$i+2)完全搞错了规则,应该固定传2作为长度。

修正后的PHP函数

function decode($e){
    $de = "";
    $c = substr($e, 0, 2);
    $k = hexdec($c);
    // 用$v获取range生成的真实起始位置,而非数组索引$i
    foreach(range(2, strlen($e)-1, 2) as $v){
        // 从$v位置开始截取固定2个字符
        $s = substr($e, $v, 2);
        $d = hexdec($s);
        $de .= chr($d ^ $k);
    }
    return $de;
}

测试验证

用你提供的输入值caaba0a3bea28af9fcfabfabaeb9e4a9a5a7测试修正后的函数,会正确返回ajith@360uads.com,完全匹配预期结果。

额外说明

原Python代码里range(2, len(e)-1, 2)的终止条件len(e)-1,在PHP的range(2, strlen($e)-1, 2)中是完全一致的——因为range的结束值是包含的,刚好覆盖到最后一组两个字符的起始位置,不会遗漏末尾的字符。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:43:21