怎么可以让php代码:62837 << -16 在windows和linux中得到相同的结果?
进行des加密操作,发现在windows和linux里得到的结果不一样,发现是createkey过程中有这个运算,从这里开始不一样的。
网络查询得知是int溢出导致,windows下是正确的。建议通过gmp扩展来操作,但是并未找到具体用法,求指教
win的结果:-176881664
lin的结果:-759700962142060544
@eechen
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
恭喜你掉到php的一个大坑了。
就是这个问题导致了各种匪夷所思的问题。
引用php原文
然而,你出现此问题是因为你两个系统的long型(php的int型在内核中均为long型)长度不一致(因为系统位数不一样)。
所以,你如要想解决此问题,就必须手动处理int到uint。
BTW,最新的php7修正了此问题,但php中无法移位一个负数。
不知道这段代码是从何而来的,左右移负数的代码是由CPU完成运算的,所以这里完全依赖机器,与系统关系都不大,看看能不能修正这段代码,或者只能是使用其他方法来代替左右移负数了。
所以从 php7 开始,位移一个负数会直接报错...