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


Use of BCCMATH library in php give different result depending in the operative system

这是我的问题。我正在使用PHP的BCMATH函数(这里是我使用的类,以及函数Base_Math::obfuscate())来混淆一些url,id等并对其进行去混淆。

我实际上是在Windows 8.1 x64上使用最新版本的XAMPP进行编程。最近,我使用基于 centOS 6.6 x64 的 vmware 在我的计算机中创建了一个虚拟机,这是我将在线拥有的操作系统,用于调试操作系统之间的问题兼容性,并拥有一个舞台环境来更快地进行更新。

当我进入 vm 环境时出现问题,BCMATH 使用的函数因此为我提供了与在 Windows 环境中不同的值。我的一个朋友警告我这可能会发生,但我喜欢冒险并浪费大量时间编程:|

我不知道的是,这个问题是由于操作系统,还是由于硬件本身而引起的?我可以修改函数,以便它始终给我相同的结果吗?如果不能,您会说混淆数据库实体 ID 是一个很好的解决方案?

这是我使用该方法的方式:

//obfuscate number 5
Math_Base::obfuscate(5,false,32,'OndZLj3mby9GpDtbrzDVGPkWR1J1dlC9JPIcsMe1l0YX8lzONTVlkCzDzPb9PJR');
//it returns on windows 8: CsQNlnY5dXMKJXYLFgzxZT85HTzPb2FQ 
//in centos YBs1DMzFdhV5JhzlG7NvtxfFmxNkrTGs

感谢@Cheery,因为他/她说的话在我问题的第三条评论中给了我问题的答案。这都是关于srand()的。由于我没有创建这个类,我的好朋友为我修改了它。这是结果类

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

 if ($this->_key !== null) {
     //Mezclar los caracteres base usando la clave
     srand(crc32($this->_key));
     $this->_base = str_shuffle($this->_base_original);
     srand(); //Restaurar semilla aleatoria por defecto
 }

对于这个:

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
}

因此,他确实避免了平台之间的任何兼容性问题。

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