进行des加密操作,发现在windows和linux里得到的结果不一样,发现是createkey过程中有这个运算,从这里开始不一样的。网络查询得知是int溢出导致,windows下是正确的。建议通过gmp扩展来操作,但是并未找到具体用法,求指教win的结果:-176881664
lin的结果:-759700962142060544

解决方案 »

  1.   

    为什么是 62837 << -16
    而不是 62837 << 16 ???
      

  2.   

    thinkphp自带的des加密类,里面是这么算的。我在网上找的多也是这么写的。
    $right ^= ($temp << -16);
      

  3.   

    -759700962142060544
    这显然是 64位 杭警钟的结果!虽然 32位 系统中 62837 << -16 和 62837 << 16 是没有区别的
    但你怎么就知道在 64位 系统中也是一样的呢?代码不是你写的,人家用没问题,而你用就有问题。这只能说明是操作系统的问题
    再说 php 直到 7 才正式发布 64 位的版本,用 32位 源码在 64位 环境中编译,多少是要有点问题的