**RSA非对称加密**结合**AES对称加密**对app端与服务端数据交互进行处理
一、准备工作
先通过工具生成RSA密钥对(私钥保存服务端用于加密,公钥给客户端解密使用)
二、加密过程
(一)先使用RSA密钥与16位随机字符加密=>生成AES密钥
(二)用AES密钥加密数据内容
三、解密过程
(一)截取数据内容前128位,再用RSA公钥一起解密=>获取AES密钥
(二)使用AES密钥解密数据内容
//加密public function enCodeEcho($arr){$iv = '1234567890123456';$private_key = "-----BEGIN PRIVATE KEY-----MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAMtBHv+yQ7IiqjhRflkX3Fkr/gD9nkNE3gaJBS1IMDEOluT5n0pxA9vlEbhGiRZnQAOBx23wDGB28iSmdKLeJrYXppCV1f/rTxpEi7UI7l/eoRwGTCKJCBz2u6IRMxPknGV+wVr6Zs7Qm1KqsU4HQLVTb2NH9x4iHHvw1JADdt27AgMBAAECgYB1FgF+eLmoj3GRWdi4CBfGQqJi/bbCt5RTHXGfATvJtsbUBrxtTKdVcCMCDZgBEN9+Za91tFfc5ghddoowHFsdearQdICt9nVlSGxSr8vh2IQlW0t3xCFpNX+eWfd2MCg+RV0yYp5XQuU8B92l7j/N3RM4jpQPOZ+hzs5RSi6FIQJBAOjZXXCIiDU3CQ8mMkkS2SRvg/wBWvQOowsbzforqk2mhUThmikIG1BWxRVR37+Xwf+HW3O+axGShByvb2vuNdECQQDfdn3JtH5ld2pbyTW3p9FCrhsh+OZNXef38kkTwUo5R3YDLslXvFU5blLyvc1c1qxoLkUTWrv2nBO1d6FNzmHLAkEAg9BpIQdpdBaPvk+1L8DHw+SNJt/tiTOwAN3goLqPUh3uW6wLBSddrwEv2H3c2C0k2W7ayo8FNZFn0IVP4h2bwQJAHyF4wKLegPAz5vmO/Djq1ClBKmhsXRbZ/BbKy2/AEV69OBBKiGh6TvfpoluCwo49kn3vrZSUXvS7Yip6VEaOJQJAZW4fr97LstHH0JJmrou2CPQlR1nIBKbpLzjqZT/CatrQSSEb4fdLq9NC10T2HvMEBMl7MCl2Pj07BdIgvJto9w==-----END PRIVATE KEY-----";$pri_key = openssl_pkey_get_private($private_key);$aesKey = $this->create_randomstr(16);//加密aes密钥 $encryptedopenssl_private_encrypt($aesKey, $encrypted, $pri_key);//用aes密钥加密数据内容$enArr = openssl_encrypt(json_encode($arr), 'AES-128-ECB', $aesKey, OPENSSL_RAW_DATA);$return = array('info' => base64_encode($encrypted . $enArr));echo json_encode($return);}//解密public function deCodeEcho($info){$iv = '1234567890123456';$public_key = "-----BEGIN PUBLIC KEY-----MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDLQR7/skOyIqo4UX5ZF9xZK/4A/Z5DRN4GiQUtSDAxDpbk+Z9KcQPb5RG4RokWZ0ADgcdt8AxgdvIkpnSi3ia2F6aQldX/608aRIu1CO5f3qEcBkwiiQgc9ruiETMT5JxlfsFa+mbO0JtSqrFOB0C1U29jR/ceIhx78NSQA3bduwIDAQAB-----END PUBLIC KEY-----";$pri_key = openssl_pkey_get_public($public_key);$info = base64_decode($info);//获取加密的AES密钥$aesKey = substr($info, 0, 128);//解密得到AES密钥 $keyopenssl_public_decrypt($aesKey, $key, $pri_key);//获取待解密数据$data = substr($info, 128);//解密得到数据$post_data = (openssl_decrypt($data, 'AES-128-ECB', $key, OPENSSL_RAW_DATA));echo $post_data;//dd(json_decode($post_data, true));}public function create_randomstr($lenth = 6){return $this->random($lenth, '123456789abcdefghijklmnpqrstuvwxyzABCDEFGHIJKLMNPQRSTUVWXYZ');}public function random($length, $chars = '0123456789'){$hash = '';$max = strlen($chars) - 1;mt_srand();for ($i = 0; $i < $length; $i++) {$hash .= $chars[mt_rand(0, $max)];}return $hash;}
