/** * 将元数据进行补位后进行3DES加密 * <p/> * 补位后 byte[] = 描述有效数据长度(int)的byte[]+原始数据byte[]+补位byte[] * * @param * sourceData 元数据字符串 * * @return 返回3DES加密后的16进制表示的字符串 */ public static function encrypt2HexStr($keys, $sourceData) { $source = array(); // 元数据 $source = ByteUtils::getBytes($sourceData); // 1.原数据byte长度 $merchantData = count($source); // echo "原数据据:" . $sourceData . "\n"; // echo "原数据byte长度:" . $merchantData . "\n"; // echo "原数据HEX表示:" . ByteUtils::bytesToHex ( $source ) . "\n"; // 2.计算补位 $x = ($merchantData + 4) % 8; $y = $x == 0 ? 0 : 8 - $x; // echo ("需要补位 :" . $y . "\n"); // 3.将有效数据长度byte[]添加到原始byte数组的头部 $sizeByte = ByteUtils::integerToBytes($merchantData); $resultByte = array(); for ($i = 0; $i < 4; $i++) { $resultByte[$i] = $sizeByte[$i]; } //var_dump($sizeByte); // 4.填充补位数据 for ($j = 0; $j < $merchantData; $j++) { $resultByte[4 + $j] = $source[$j]; } //var_dump($resultByte); for ($k = 0; $k < $y; $k++) { $resultByte[$merchantData + 4 + $k] = 0x0; } //var_dump($resultByte); //echo ("补位后的byte数组长度:" . count ( $resultByte ) . "\n"); //echo ("补位后数据HEX表示:" . ByteUtils::bytesToHex ( $resultByte ) . "\n"); //echo ("秘钥HEX表示:" . ByteUtils::strToHex ( $keys ) . "\n"); //echo ("秘钥长度:" . count ( ByteUtils::getBytes ( $keys ) ) . "\n"); //echo ByteUtils::toStr ( $resultByte ); $desdata = TDESUtil::encrypt(ByteUtils::toStr($resultByte), $keys); //echo ("加密后的长度:" . strlen ( $desdata ) . "\n"); return ByteUtils::strToHex($desdata); }