Php base64_编码/解码工作不正常

Php base64_编码/解码工作不正常,php,base64,Php,Base64,我试图使用base64\u encode以不同的方式显示ID。我还试图在id中添加一个大的数字,这样字符串看起来就会更长 问题是我加密了一个数字,使之成为一个字符串。然后,当我解密相同的字符串时,我期望相同的值,但在我的情况下,它返回不同的值 为什么我看不到相同的价值观 这是我的代码: define('IDS_SALT', 852045641596357); function simple_encode($id){ $data = ''; $id += IDS_SALT;

我试图使用
base64\u encode
以不同的方式显示ID。我还试图在id中添加一个大的数字,这样字符串看起来就会更长

问题是我加密了一个数字,使之成为一个字符串。然后,当我解密相同的字符串时,我期望相同的值,但在我的情况下,它返回不同的值

为什么我看不到相同的价值观

这是我的代码:

define('IDS_SALT', 852045641596357);

function simple_encode($id){
    $data = '';
    $id += IDS_SALT;
    $data = base64_encode($id);
    $data = str_replace(array('+','/','='),array('-','_','.'),$data);
    return $data;
}


function simple_decode($code){
    $data = '';
    $code = str_replace(array('-','_','.'),array('+','/','='),$code);
    $id = base64_decode($code);
    $id -= IDS_SALT;
    return $id;
}

//this is returning "OC41MjA0NTY0MTU5NjM2RSsxNA.."
echo 'Encrypted: ';
echo  simple_encode(7);
echo '<br />';

//this is returning 3 a NOT 7. it should return 7
echo 'Encrypted: ';
echo  simple_decode(  simple_encode(7)  );
echo '<br />';
define('IDS_SALT',852045641596357);
函数简单编码($id){
$data='';
$id+=id_盐;
$data=base64_编码($id);
$data=str_replace(数组(“+”、“/”、“=”)、数组(“-”、“"、”)、$data);
返回$data;
}
函数简单解码($code){
$data='';
$code=str_replace(数组('-',''''','.')、数组('+','/','=')、$code);
$id=base64_解码($code);
$id-=id_盐;
返回$id;
}
//这是返回“OC41MjA0NTY0MTU5NjM2RSsxNA..”
echo“加密:”;
回波简单编码(7);
回声“
”; //这是返回3 a而不是7 a。它应该返回7 echo“加密:”; 回波简单解码(简单编码(7)); 回声“
”;
我刚刚在我的测试服务器上运行了相同的代码(与上面完全相同)-我收到了不同的结果:

加密:ODUyMDQ1NjQxNTk2MzY0

加密:7

哪个看起来是正确的

您的测试脚本中是否有其他可能会干扰的代码


Steve

您的salt整数远远超出了32位PHP安装支持的范围,其最大值为带符号的32位整数2147483647。做一个
echo-IDS\u-SALT
来看看里面到底存储了什么。我做了echo-number\u格式(IDS\u-SALT,0,,,,”);它显示了我存储在IDS_SALTMarc B中的同一个数字,只是换成了一台32位的机器,而salt并没有按照规定存储。我的服务器是64位的,这是否意味着我的php是32位的,而我的服务器是64位的?如何检查我的php位大小?请看:-将告诉您如何检查位大小…感谢Steve,我不确定我们是否运行了不同的php版本,使其具有不同的性能。当我运行上面的代码时,我看到以下加密代码:OC41MjA0NTY0MTU5NjM2RSsxNA。。加密:3可能-我正在运行PHP5.3这一结束。