在php中使用BCCMATH库会根据操作系统给出不同的结果

在php中使用BCCMATH库会根据操作系统给出不同的结果,php,Php,这是我的问题。我正在使用它来混淆一些URL、ID等,并对它们进行除臭 我实际上是在使用最新版本的XAMPP在windows 8.1 x64上编程。最近,我在我的计算机上创建了一个基于centOS 6.6 x64的虚拟机,它是我将在线使用的操作系统,用于调试操作系统之间的问题兼容性,并提供一个阶段环境以加快更新速度 当我进入虚拟机环境时,问题就出现了,BCMATH中使用的函数会给我不同的值,就像在windows环境中一样。我的一个朋友警告我这种情况可能会发生,但我喜欢冒险,并且在编程中浪费了大量的

这是我的问题。我正在使用它来混淆一些URL、ID等,并对它们进行除臭

我实际上是在使用最新版本的XAMPP在windows 8.1 x64上编程。最近,我在我的计算机上创建了一个基于centOS 6.6 x64的虚拟机,它是我将在线使用的操作系统,用于调试操作系统之间的问题兼容性,并提供一个阶段环境以加快更新速度

当我进入虚拟机环境时,问题就出现了,BCMATH中使用的函数会给我不同的值,就像在windows环境中一样。我的一个朋友警告我这种情况可能会发生,但我喜欢冒险,并且在编程中浪费了大量的时间:|

我不知道的是,如果这个问题是因为操作系统,因为硬件本身还是什么?我可以修改函数,使其始终返回相同的结果吗?如果不能,您会说这是混淆数据库实体ID的一个好解决方案吗

这是我使用方法的方式:

//obfuscate number 5
Math_Base::obfuscate(5,false,32,'OndZLj3mby9GpDtbrzDVGPkWR1J1dlC9JPIcsMe1l0YX8lzONTVlkCzDzPb9PJR');
//it returns on windows 8: CsQNlnY5dXMKJXYLFgzxZT85HTzPb2FQ 
//in centos YBs1DMzFdhV5JhzlG7NvtxfFmxNkrTGs
感谢,因为他/她在我问题的第三条评论中给了我问题的答案。这都是关于srand()的。因为我没有创建这个类,所以我的导师为我修改了它

他确实更改了此部分(导致问题):

对于这一个:

if ($this->_key !== null) {
    //Mezclar los caracteres base usando la clave
    mt_srand(crc32($this->_key));
    $chars = Str::chars($this->_base_original);
    for($i = count($chars) - 1; $i > 0; --$i) {
        $j = mt_rand(0, $i);
        if($i !== $j) {
            list($chars[$i], $chars[$j]) = array($chars[$j], $chars[$i]);
        }
    }
    $this->_base= join('', $chars);
    mt_srand();//Restaurar semilla aleatoria por defecto
}
因此,他确实避免了平台之间的任何兼容性问题


感谢所有在此提供帮助的人。

您能给出示例字符串吗?还有你使用类的方式..代码不仅仅使用。它主要依赖于PHPs本机整数和数学(易受32/64位差异的影响)。这只是一个复杂的
base\u convert
编码。@mario两个系统都是64位的,也就是说,我认为这是因为bcmath,但我可能是错的,我只是不确定我读了这个-问题是
srand
函数在
destination\u base
和<代码>不同的处理器/处理器速度/操作系统/OS版本/PHP版本/webserver软件可能会生成不同的序列,而字符串shuffle会给出不同的结果。还有,只是为了了解问题-
if ($this->_key !== null) {
    //Mezclar los caracteres base usando la clave
    mt_srand(crc32($this->_key));
    $chars = Str::chars($this->_base_original);
    for($i = count($chars) - 1; $i > 0; --$i) {
        $j = mt_rand(0, $i);
        if($i !== $j) {
            list($chars[$i], $chars[$j]) = array($chars[$j], $chars[$i]);
        }
    }
    $this->_base= join('', $chars);
    mt_srand();//Restaurar semilla aleatoria por defecto
}