About the difference in the displacement between win and CentOS

Source: Internet
Author: User
Tags centos server
The project uses DES encryption, and one of the steps is _createkeys
function _createkeys ($key) {//declaring This locally speeds things up a bit $pc 2bytes0 = Array (0,0x4,0x20000 000,0x20000004,0x10000,0x10004,0x20010000,0x20010004,0x200,0x204,0x20000200,0x20000204,0x10200,0x10204,      0x20010200,0x20010204); $pc 2bytes1 = Array (0,0x1,0x100000,0x100001,0x4000000,0x4000001,0x4100000,0x4100001,0x100,0x101,0x100100,0x100101      , 0x4000100,0x4000101,0x4100100,0x4100101); $pc 2bytes2 = Array (0,0x8,0x800,0x808,0x1000000,0x1000008,0x1000800,0x1000808,0,0x8,0x800,0x808,0x1000000,      0x1000008,0x1000800,0x1000808); $pc 2bytes3 = Array (0,0x200000,0x8000000,0x8200000,0x2000,0x202000,0x8002000,0x8202000,0x20000,0x220000,0x8020000      , 0x8220000,0x22000,0x222000,0x8022000,0x8222000); $pc 2bytes4 = Array (0,0x40000,0x10,0x40010,0,0x40000,0x10,0x40010,0x1000,0x41000,0x1010,0x41010,0x1000,0x41000,      0X1010,0X41010); $pc 2bytes5 = Array (0,0x400,0x20,0x420,0,0x400,0x20,0x420,0x2000000,0x2000400,0x2000020,0x2000420,0x2000000, 0x2000400,0x2000020,0x2000420); $pc 2bytes6 = Array (0,0x10000000,0x80000,0x10080000,0x2,0x10000002,0x80002,0x10080002,0,0x10000000,0x80000,      0X10080000,0X2,0X10000002,0X80002,0X10080002); $pc 2bytes7 = Array (0,0x10000,0x800,0x10800,0x20000000,0x20010000,0x20000800,0x20010800,0x20000,0x30000,0x20800,      0x30800,0x20020000,0x20030000,0x20020800,0x20030800); $pc 2bytes8 = Array (0,0x40000,0,0x40000,0x2,0x40002,0x2,0x40002,0x2000000,0x2040000,0x2000000,0x2040000,0x2000002      , 0x2040002,0x2000002,0x2040002); $pc 2bytes9 = Array (0,0x10000000,0x8,0x10000008,0,0x10000000,0x8,0x10000008,0x400,0x10000400,0x408,0x10000408,      0x400,0x10000400,0x408,0x10000408); $pc 2bytes10 = Array (0,0x20,0,0x20,0x100000,0x100020,0x100000,0x100020,0x2000,0x2020,0x2000,0x2020,0x102000,      0X102020,0X102000,0X102020); $pc 2bytes11 = Array (0,0x1000000,0x200,0x1000200,0x200000,0x1200000,0x200200,0x1200200,0x4000000,0x5000000,      0X4000200,0X5000200,0X4200000,0X5200000,0X4200200,0X5200200); $pc 2bytes12 = Array (0,0x1000,0x8000000, 0x8001000,0x80000,0x81000,0x8080000,0x8081000,0x10,0x1010,0x8000010,0x8001010,0x80010,0x81010,0x8080010,      0X8081010);      $pc 2bytes13 = Array (0,0x4,0x100,0x104,0,0x4,0x100,0x104,0x1,0x5,0x101,0x105,0x1,0x5,0x101,0x105); $masks = Array ( 4294967295,2147483647,1073741823,536870911,268435455,134217727,67108863,33554431,16777215,8388607,4194303,2097151,1048575      , 524287,262143,131071,65535,32767,16383,8191,4095,2047,1023,511,255,127,63,31,15,7,3,1,0);      How many iterations (1 for DES, 3 for triple DES) $iterations = ((strlen ($key) >= 24)? 3:1); Stores the return keys $keys = array (); Size = * Iterations But you don't specify this in PHP//now define the left shifts which need to being done $      Shifts = Array (0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0);      Other variables $m = 0;      $n = 0; for ($j =0; $j < $iterations; $j + +) {//either 1 or 3 iterations $left = (ord ($key {$m + +}) << 24) | (Ord ($key {$m + +}) << 16) | (Ord ($key {$m + +}) << 8) |        Ord ($key {$m + +}); $right = (Ord ($key {$m + +}) << 24) | (Ord ($key {$m + +}) << 16) | (Ord ($key {$m + +}) << 8) |        Ord ($key {$m + +}); $temp = (($left >> 4 & $masks [4]) ^ $right) & 0x0f0f0f0f; $right ^= $temp;        $left ^= ($temp << 4); $temp = (($right >> & $masks [+]) ^ $left) & 0x0000ffff; $left ^= $temp;        $right ^= ($temp <<-16); $temp = (($left >> 2 & $masks [2]) ^ $right) & 0x33333333; $right ^= $temp;        $left ^= ($temp << 2); $temp = (($right >> & $masks [+]) ^ $left) & 0x0000ffff; $left ^= $temp;        $right ^= ($temp <<-16); $temp = (($left >> 1 & $masks [1]) ^ $right) & 0x55555555; $right ^= $temp;        $left ^= ($temp << 1); $temp = (($right >> 8 & $masks [8]) ^ $left) & 0x00ff00ff; $left ^= $temp;        $right ^= ($temp << 8); $temp = (($left >> 1 & $masks [1]) ^ $right) &0x55555555; $right ^= $temp;        $left ^= ($temp << 1); The right side needs to being shifted and to get the last four bits of the left side $temp = ($left << 8) |        ($right >> & $masks []) & 0x000000f0); Left needs to being put upside down $left = ($right << 24) | (($right << 8) & 0xff0000) | (($right >> 8 & $masks [8]) & 0xff00) |        ($right >> & $masks [] & 0xf0);        $right = $temp;          Now go through and perform these shifts in the left and right keys for ($i =0; $i < count ($shifts); $i + +) { Shift the keys either one or both bits to the left if ($shifts [$i] > 0) {$left = ($left & lt;< 2) |             ($left >> & $masks [26])); $right = (($right << 2) |          ($right >> & $masks [26])); } else {$left = (($left << 1) |             ($left >> & $masks [27])); $right = (($Right << 1) |          ($right >> & $masks [27]));          } $left = $left & -0xf;          $right = $right & -0xf; Now apply PC-2, in such a-on-the-E is easier when encrypting or decrypting//this conversion would look like P C-2 except only the last 6 bits of each byte is used//rather than the consecutive bits and the order of lines WI ll be according to//how the S selection functions would be applied:s2, S4, S6, S8, S1, S3, S5, S7 $left temp = $pc 2bytes0[$left >> & $masks [28]] | $PC 2bytes1[($left >> & $masks [+]) & 0xf] | $PC 2bytes2[($left >> & $masks []) & 0xf] | $PC 2bytes3[($left >> & $masks [+]) & 0xf] | $PC 2bytes4[($left >> & $masks []) & 0xf] | $PC 2bytes5[($left >> 8 & $masks [8]) & 0XF] |          $PC 2bytes6[($left >> 4 & $masks [4]) & 0XF]; $righTtemp = $pc 2bytes7[$right >> & $masks [28]] | $PC 2bytes8[($right >> & $masks [+]) & 0xf] | $PC 2bytes9[($right >> & $masks []) & 0xf] | $PC 2bytes10[($right >> & $masks [+]) & 0xf] | $PC 2bytes11[($right >> & $masks []) & 0xf] | $PC 2bytes12[($right >> 8 & $masks [8]) & 0XF] |          $PC 2bytes13[($right >> 4 & $masks [4]) & 0XF];          $temp = (($righttemp >> & $masks [+]) ^ $lefttemp) & 0x0000ffff; $keys [$n + +] = $lefttemp ^ $temp;        $keys [$n + +] = $righttemp ^ ($temp << 16);    }}//for each iterations//return the keys we ' ve created return $keys; }//end of Des_createkeys


Tried a few times to the mark that code will produce different results, as if the cause of displacement?

If PHP alone in the Win7/centos system encryption and decryption is not a problem, but the development of iOS programmers said that the original decryption on the Win7 can be successful, the CentOS failed
Using the system-provided functions

Question: How to solve this problem, or have other DES classes associated with it can be used in PHP and iOS.


Reply to discussion (solution)

Why doesn't the code add color?
Original Code 35 line: $temp = (($left >> 2 & $masks [2]) ^ $right) & 0x33333333; $right ^= $temp; $left ^= ($temp << 2);

Note the differences between 32-bit systems and 64-bit systems

Note the differences between 32-bit systems and 64-bit systems

This machine: Win7 64
Virtual machine: centos6.4 64
Server: centos6.3 64

The same system can be encrypted and decrypted with each other, as if not a 32/64-bit problem ah.

Isn't PHP also available in 32-bit and 64-bit?

Isn't PHP also available in 32-bit and 64-bit?


Normal on another CentOS server

  • Contact Us

    The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

    If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.