这是我的问题。我正在使用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
}
因此,他确实避免了平台之间的任何兼容性问题。
感谢所有在这里提供帮助的人。