$value) { $key < $strCount && $strArr[$key].=$value; } return str_replace('=', 'O0O0O', join('', $strArr)); } /** * 通用解密 * @param String $string 需要解密的字串 * @param String $skey 解密KEY * @return String */ private static function deCode($string) { $skey = array_reverse(str_split(self::$KEY)); $strArr = str_split(str_replace('O0O0O', '=', $string), 2); $strCount = count($strArr); foreach ($skey as $key => $value) { $key < $strCount && $strArr[$key] = rtrim($strArr[$key], $value); } return base64_decode(join('', $strArr)); } /* * DES 加密 * @param string $data 待加密明文 * @param string $deskey 加密秘钥 * @return string **/ private static function DesNncrypt($data, $key='') { $deskey=$key=='' ? self::$sKey : $key; if(strlen($deskey) > 8) $deskey=substr($deskey,0,8);//php加密秘钥只能为8位 if(function_exists('openssl_encrypt')){ $data = openssl_encrypt($data, 'AES-128-ECB', $deskey, OPENSSL_RAW_DATA); $data = strtolower(bin2hex($data)); return $data; }else{ $blocksize = mcrypt_get_block_size(MCRYPT_DES,MCRYPT_MODE_ECB); $pad = $blocksize - (strlen($data) % $blocksize); $data1 = $data. str_repeat(chr($pad),$pad); $iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_DES,MCRYPT_MODE_ECB),MCRYPT_RAND); //初始化向量 $data_encrypt = mcrypt_encrypt(MCRYPT_DES,$deskey,$data1,MCRYPT_MODE_ECB);//加密函数 $datastr = bin2hex($data_encrypt); return $datastr; } } /* * DES 解密 * @param string $data 待解密密文 * @param string $deskey 加密秘钥 * @return string */ private static function DesDecrypt($endata,$deskey=''){ $deskey=$deskey=='' ? self::$sKey : $deskey; if(strlen($deskey) > 8) $deskey=substr($deskey,0,8);//php加密秘钥只能为8位 if(function_exists('openssl_encrypt')){ $decrypted = openssl_decrypt(hex2bin($endata), 'AES-128-ECB', $deskey, OPENSSL_RAW_DATA); return $decrypted; }else{ $de_datastr = $endata !== false && preg_match('/^[0-9a-fA-F]+$/i',$endata) ? pack('H*',$endata):false; $data_decrypt = mcrypt_decrypt(MCRYPT_DES,$deskey,$de_datastr,MCRYPT_MODE_ECB,null);//解密函数 $ret = self::_pkcs5Unpad($data_decrypt); $de_data = trim($ret); return $de_data; } } private static function _pkcs5Unpad($text){ $pad = ord($text{strlen($text)-1}); if($pad > strlen($text)) return false; if(strspn($text,chr($pad),strlen($text)-$pad) != $pad) return false; $ret = substr($text,0,-1*$pad); return trim($ret); } /** * 生成随机填充码 * @return string 10位 * @return string */ private static function createNonceStr($length = 5) { $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; $str = ""; for ($i = 0; $i < $length; $i++) { $str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1); } return "crmeb".$str; } }