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

PHP加解密函数重复加密同值结果不一致问题排查与修复求助

问题成因

加密结果不稳定的核心原因是**str_shuffle('LPTKEZG')[0]**这行代码:

  • str_shuffle()函数会随机打乱字符串的字符顺序,每次调用都会生成不同的排列结果
  • 每次加密时,这里会随机选取一个字符追加到结果中,导致同一输入的最终加密字符串每次都不一样
修复方案

既然版本标识需要固定(而非随机),直接将随机生成的部分替换为固定字符即可,比如选择原字符集中的L,或者根据需求指定任意固定字符。这样无需修改解密逻辑,就能保证同一输入的加密结果完全一致。

修改后的加密函数
public function encrypt($string)
{
    $i = $string;
    $keychars = 'AISXD5H2FIWB81KE76JY93V4ORLAMT0QDUNG';
    
    $divider = 19;
    $biasDivider = 14;
    $noise = 53;
    
    if ($i < 0) {
        throw new Exception('Expected positive integer');
    }
    
    $i = $i + $noise; // add noise to a number
    $bias = $i % $biasDivider;

    $res = '';

    while ($i > 0) {
        $div = $i % $divider;
        $i = intdiv($i, $divider);
        $res .= $keychars[$div + $bias];
    }

    // 将随机版本字符替换为固定值,这里选用原字符集中的'L'
    $res .= 'L';
    $res .= $keychars[$bias]; // Encoded bias

    return $res;
}
验证说明

修改后,同一数值多次调用encrypt()会得到完全相同的结果,原有的decrypt()函数无需改动——因为解密时会截取掉最后两位字符(固定版本字符+bias字符),逻辑完全兼容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 17:42:23