class Crypt3Des {
//初始化
function Crypt3Des($key,$iv) {
$this->key = $key;
$this->iv = $iv;
}
//数据加密
function encrypt($input){
$size = mcrypt_get_block_size(‘tripledes’, ‘cbc’);
$input = $this->pkcs5_pad($input, $size);
$key = $this->key;
$iv = $this->iv;
$td = mcrypt_module_open(MCRYPT_3DES, ”, MCRYPT_MODE_CBC, ”);
@mcrypt_generic_init($td, $key, $iv);
$data = mcrypt_generic($td, $input);
mcrypt_generic_deinit($td);
mcrypt_module_close($td);
$data = base64_encode($data);
return $data;
}
//数据解密
function decrypt($encrypted){
$encrypted = base64_decode($encrypted);
$key = $this->key;
$td = mcrypt_module_open(MCRYPT_3DES,”,MCRYPT_MODE_CBC,”);
$iv = $this->iv;
@mcrypt_generic_init($td, $key, $iv);
$decrypted = mdecrypt_generic($td, $encrypted);
mcrypt_generic_deinit($td);
mcrypt_module_close($td);
$y=$this->pkcs5_unpad($decrypted);
return $y;
}
function pkcs5_pad ($text, $blocksize) {
$pad = $blocksize – (strlen($text) % $blocksize);
return $text . str_repeat(chr($pad), $pad);
}
function pkcs5_unpad($text){
$pad = ord($text{strlen($text)-1});
if ($pad > strlen($text)) {
return false;
}
if (strspn($text, chr($pad), strlen($text) – $pad) != $pad){
return false;
}
return substr($text, 0, -1 * $pad);
}
}
$key = “jxquJS”;
//如果JAVA的向量为newbyte[]{1,2,3,4,5,6,7,8}
//那么在PHP中就是:0102030405060708
//然后再用PACK函数转化一下,如下:
$iv = pack(‘H*’,’0000000000000000′);
//初始化一个对象
$rep=new Crypt3Des($key, $iv);
$time = date(‘Y-m-d H:i:s’, time()+3600*8);
$input=”{‘time’:'”.$time.”‘,’userId’:’2c3f7c06-2dd4-4fe5-b34c-2fcab0db6cc2′}”;
echo “原文:”.$input.”
“;
$encrypt_card=$rep->encrypt($input);
echo “加密:”.$encrypt_card.”
“;
$url = “http://***work.do?sysId=sys012¶ms=”;
$url .= urlencode($encrypt_card);
echo “url:”.$url;
echo ”
“;
$str = file_get_contents($url);
echo “返回数据:”.$str;
echo ”
“;
echo “解密:”.$rep->decrypt($str);