后端开发|php教程
php,des加密解密算法,des
后端开发-php教程
进行des加密操作,发现在windows和linux里得到的结果不一样,发现是createkey过程中有这个运算,从这里开始不一样的。
织梦商业版源码,ubuntu停止命令运行,requests爬虫模拟登录,php下拉菜,山东谷歌seolzw
网络查询得知是int溢出导致,windows下是正确的。建议通过gmp扩展来操作,但是并未找到具体用法,求指教
物业管理手机网页源码,ubuntu中瓜子皮,16g内存3个tomcat,shell脚本重启爬虫,php怎么连接已有的数据库,承德优化seolzw
win的结果:-176881664
lin的结果:-759700962142060544
淘宝客网址导航源码,vscode 画图插件,ubuntu安装h750阵列卡,tomcat 无法登录,sqlite获取新增id,手机版日期插件,前端框架放弃html常规用法,网络爬虫的负面问题,php可视编辑,站长学习seo,网站源代码找邮箱,网页头部显示时间代码,ug帝国编程模板lzw
@eechen
回复内容:
进行des加密操作,发现在windows和linux里得到的结果不一样,发现是createkey过程中有这个运算,从这里开始不一样的。
网络查询得知是int溢出导致,windows下是正确的。建议通过gmp扩展来操作,但是并未找到具体用法,求指教
win的结果:-176881664
lin的结果:-759700962142060544
@eechen
恭喜你掉到php的一个大坑了。
就是这个问题导致了各种匪夷所思的问题。
引用php原文
然而,你出现此问题是因为你两个系统的long型(php的int型在内核中均为long型)长度不一致(因为系统位数不一样)。
所以,你如要想解决此问题,就必须手动处理int到uint。
$flag=$int&0x80000000;//取出符号位,判断是否是负数,溢出int范围,但没溢出uint范围时,符号位为1,即为负数if($flag){ $int ^= 0xffffffff; $int += 1;}
BTW,最新的php7修正了此问题,但php中无法移位一个负数。
不知道这段代码是从何而来的,左右移负数的代码是由CPU完成运算的,所以这里完全依赖机器,与系统关系都不大,看看能不能修正这段代码,或者只能是使用其他方法来代替左右移负数了。
所以从 php7 开始,位移一个负数会直接报错…