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