在做接口的时候,我们需要对数据进行加密处理,本例使用的是AES/DES加密解密方法,
因为在加密解密的过程中,加密的串是乱码的,所以加乱码的串进行了base64编码或者转为16进制
同理解密的过程正好相反,具体方法如下:
//AES加密
function mc_encrypt($data, $mc_key,$method = 'AES-256-ECB',$basecode="base64",$iv="") { $options = OPENSSL_RAW_DATA; //数据格式选项(可选) $encode = openssl_encrypt($data, $method, $mc_key, $options,$iv); if($basecode == "hex"){ //hex加密 $encode = String2Hex($encode); }else{ //base64加密 $encode = base64_encode($encode); } return $encode; }
//AES解密
function mc_decrypt($result, $mc_key,$method = 'AES-256-ECB',$basecode="base64",$iv="") { $options = OPENSSL_RAW_DATA; //数据格式选项(可选) if($basecode == "hex"){ //hex解密 $result = Hex2String($result); }else{ //base64解密 $result = base64_decode($result); } $decrypted = openssl_decrypt($result, $method, $mc_key, $options,$iv); return $decrypted; }
//16进制串转为字符串
function Hex2String($hex) { $string = ''; for ($i = 0; $i < strlen($hex) - 1; $i+=2) { $string .= chr(hexdec($hex[$i] . $hex[$i + 1])); } return $string; }
//字符串转为16进制串
function String2Hex($string) { $hex = ''; for ($i = 0; $i < strlen($string); $i++) { $tmp = dechex(ord($string[$i])); if (strlen($tmp) == 1) { $tmp = "0" . $tmp; } $hex .= $tmp; } return $hex; }