コード例 #1
0
ファイル: TDESUtil.php プロジェクト: zrone/JDproject
 /**
  * 将元数据进行补位后进行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);
 }