1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128
| /** * 3DES加解密类 * @Author: yxh * @version: v1.0 * 2018年1月19日 */ class Encrypt { //加密秘钥, private $_key; private $_iv; public function __construct($key, $iv) { $this->_key = $key; $this->_iv = $iv; }
/** * 对字符串进行3DES加密 * @param string 要加密的字符串 * @return mixed 加密成功返回加密后的字符串,否则返回false */ public function encrypt3DES($str) { $td = mcrypt_module_open(MCRYPT_3DES, "", MCRYPT_MODE_CBC, ""); if ($td === false) { return false; } //检查加密key,iv的长度是否符合算法要求 $key = $this->fixLen($this->_key, mcrypt_enc_get_key_size($td)); $iv = $this->fixLen($this->_iv, mcrypt_enc_get_iv_size($td));
//加密数据长度处理 $str = $this->strPad($str, mcrypt_enc_get_block_size($td));
if (mcrypt_generic_init($td, $key, $iv) !== 0) { return false; } $result = mcrypt_generic($td, $str); mcrypt_generic_deinit($td); mcrypt_module_close($td); return $result; }
/** * 对加密的字符串进行3DES解密 * @param string 要解密的字符串 * @return mixed 加密成功返回加密后的字符串,否则返回false */ public function decrypt3DES($str) { $td = mcrypt_module_open(MCRYPT_3DES, "", MCRYPT_MODE_CBC, ""); if ($td === false) { return false; }
//检查加密key,iv的长度是否符合算法要求 $key = $this->fixLen($this->_key, mcrypt_enc_get_key_size($td)); $iv = $this->fixLen($this->_iv, mcrypt_enc_get_iv_size($td));
if (mcrypt_generic_init($td, $key, $iv) !== 0) { return false; }
$result = mdecrypt_generic($td, $str); mcrypt_generic_deinit($td); mcrypt_module_close($td);
return $this->strUnPad($result); }
/** * 返回适合算法长度的key,iv字符串 * @param string $str key或iv的值 * @param int $td_len 符合条件的key或iv长度 * @return string 返回处理后的key或iv值 */ private function fixLen($str, $td_len) { $str_len = strlen($str); if ($str_len > $td_len) { return substr($str, 0, $td_len); } else if($str_len < $td_len) { return str_pad($str, $td_len, '0'); } return $str; }
/** * 返回适合算法的分组大小的字符串长度,末尾使用\0补齐 * @param string $str 要加密的字符串 * @param int $td_group_len 符合算法的分组长度 * @return string 返回处理后字符串 */ private function strPad($str, $td_group_len) { $padding_len = $td_group_len - (strlen($str) % $td_group_len); return str_pad($str, strlen($str) + $padding_len, "\0"); } /** * 返回适合算法的分组大小的字符串长度,末尾使用\0补齐 * @param string $str 要加密的字符串 * @return string 返回处理后字符串 */ private function strUnPad($str) { return rtrim($str); } /** * 取消订单(对已锁定的座位解锁) */ public function cancelorder($oid,$fromstationid,$orderid){ $header[] = 'appid:' . config('fjconfig.soapappid'); $header[] = 'username:' . config("fjconfig.soapusername"); $header[] = 'password:' . config('fjconfig.soappassword'); $header[] = 'oid:' . $oid; $header[] = 'fromstationid:' . $fromstationid; $header[] = 'orderid :' . $orderid; \think\Log::record ($header, '**************submitdata'); $return=linkInterface("applyorder",$header); \think\Log::record ($return, '**************cancelorder'); return $return; } }
|