本文主要是介绍微信公众号使用openssl代替Mcrypt,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
/*** 对明文进行加密* @param string $text 需要加密的明文* @return string 加密后的密文*/public function encrypt($text, $appid){try {//获得16位随机字符串,填充到明文之前$random = $this->getRandomStr();$text = $random . pack("N", strlen($text)) . $text . $appid;//使用自定义的填充方式对明文进行补位填充$pkc_encoder = new PKCS7Encoder;$text = $pkc_encoder->encode($text);//加密$iv = substr($this->key, 0, 16);$encrypted = openssl_encrypt($text,'AES-256-CBC',$this->key,OPENSSL_RAW_DATA|OPENSSL_ZERO_PADDING,$iv);//print(base64_encode($encrypted));//使用BASE64对加密后的字符串进行编码return array(ErrorCode::$OK, base64_encode($encrypted));} catch (Exception $e) {//print $e;return array(ErrorCode::$EncryptAESError, null);}}/*** 对密文进行解密* @param string $encrypted 需要解密的密文* @return string 解密得到的明文*/public function decrypt($encrypted, $appid){try {//使用BASE64对需要解密的字符串进行解码$ciphertext_dec = base64_decode($encrypted);$iv = substr($this->key, 0, 16);//解密$decrypted = openssl_decrypt($ciphertext_dec,'AES-256-CBC',$this->key,OPENSSL_RAW_DATA|OPENSSL_ZERO_PADDING,$iv);} catch (\Exception $e) {return array(ErrorCode::$DecryptAESError . $e, null);}try {//去除补位字符$pkc_encoder = new PKCS7Encoder;$result = $pkc_encoder->decode($decrypted);//去除16位随机字符串,网络字节序和AppIdif (strlen($result) < 16)return "";$content = substr($result, 16, strlen($result));$len_list = unpack("N", substr($content, 0, 4));$xml_len = $len_list[1];$xml_content = substr($content, 4, $xml_len);$from_appid = substr($content, $xml_len + 4);} catch (Exception $e) {//print $e;return array(ErrorCode::$IllegalBuffer, null);}if ($from_appid != $appid)return array(ErrorCode::$ValidateAppidError, null);return array(0, $xml_content);}
这篇关于微信公众号使用openssl代替Mcrypt的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!