{"id":447,"title":"php\u52a0\u89e3\u5bc6(aes+rsa)","good":0,"bad":0,"hit":2439,"created_at":"2019-12-10 10:10:33","content":"
\u672c\u4f8b\u4e3aapp\u4e0e\u63a5\u53e3\u4e4b\u95f4\u7684\u53cc\u5411\u52a0\u89e3\u5bc6demo
<\/p>
<?php\nrequire_once 'Aes.php';\n$origin = isset($_SERVER['HTTP_ORIGIN']) ? $_SERVER['HTTP_ORIGIN'] : '';\n$config = require_once 'site.php';\n$allowDomain = $config['origin'];\nif (in_array($origin, $allowDomain) || empty($origin)) {\n header("Access-Control-Allow-Origin:" . $origin);\n header("Access-Control-Allow-Credentials: true");\n}\n\n$rsaPrivateKey = $config['rsa_private_key'];\n$rsaPrivateKey = "-----BEGIN RSA PRIVATE KEY-----\\n" .\n wordwrap($rsaPrivateKey, 64, "\\n", true) .\n "\\n-----END RSA PRIVATE KEY-----";\n\n$rsaPublicKey = $config['rsa_public_key'];\n$rsaPublicKey = "-----BEGIN PUBLIC KEY-----\\n" .\n wordwrap($rsaPublicKey, 64, "\\n", true) .\n "\\n-----END PUBLIC KEY-----";\n\/\/$post=file_get_contents("php:\/\/input");\n\/\/print_r(json_decode($post,true));\n\/\/die();\n$type = !empty($_POST['type']) ? trim($_POST['type']) : '';\n$data = !empty($_POST['data']) ? trim($_POST['data']) : '';\/\/app\u4f20\u9012\u7684\u6570\u636e\uff08\u539f\u6587\u6216\u5bc6\u6587)\n\/\/app\u7aef\u7684\u53c2\u6570\u8981\u505aurlencode\u5904\u7406\uff0c\u4e0d\u7136+\u53f7\u4f20\u8fc7\u6765\u5c31\u8f6c\u6210\u7a7a\u683c\u4e86\uff1b\n\nswitch ($type) {\n case 0:\/\/\u539f\u6837\u8fd4\u56de\n echo $data;\n break;\n case 1:\/\/app\u4f20base64_encode(aes(hello))\u5bc6\u6587\uff0c\u5148\u89e3\u5bc6\u518d\u52a0\u5bc6\n $post = json_decode($data, true);\n $message = ($post['message']);\n $aes = new Aes($config['aes_key'], $config['aes_iv'], $config['aes_method']);\n \/\/echo base64_encode($aes->encrypt('P@ssw0rd!@#$%^&*()_-+=\u1785\u17c6\u1793\u17bd\u1793\u1791\u1791\u17bd\u179b\u17a2\u1791\u17b7\u1790\u17b7\u1787\u1793\u1780\u17d2\u1793\u17bb\u1784\u1796\u17c1\u179b\u178f\u17c2\u1798\u17bd\u1799'));die();\n \/\/SzYzYUJubU5DZTZ0UUdCclh0UzhrN1pzU1lhKzVLTVBjQWFOZWdQZm51ZUwxYW9nVGlNNzJac1l4SDgxZFMyWGdScTZ4NG85SU05SWttaklmV3FDcmNpajZDMDNzSVN3QVlhRTVWK2JuRE82TmxJZUpMU2NZNndJeGFlNEdKazRSSXhFTzlWekltbFAvSDFWWlFtbjhBPT0=\n $jiemi = $aes->decrypt($message);\n if (!$jiemi) {\n echo json_encode([\n 'message' => '',\n 'key' => ''\n ]);\n die();\n }\n \/\/echo $jiemi;die();\n $secretStr = ($aes->encrypt('success$$' . $jiemi));\n echo json_encode([\n 'message' => $secretStr,\n 'key' => ''\n ]);\n break;\n case 2:\/\/app\u4f20aes+rsa\uff08\u516c\u94a5)\u52a0\u5bc6\n \/**\n * {\n * "message": "SzYzYUJubU5DZTZ0UUdCclh0UzhrN1pzU1lhKzVLTVBjQWFOZWdQZm51ZUwxYW9nVGlNNzJac1l4SDgxZFMyWGdScTZ4NG85SU05SWttaklmV3FDcmNpajZDMDNzSVN3QVlhRTVWK2JuRE82TmxJZUpMU2NZNndJeGFlNEdKazRSSXhFTzlWekltbFAvSDFWWlFtbjhBPT0=",\n * "key": "hVYlNNbDJleZkhWbqy3L5k1nzTNW4LP8CdrI\/WFxC9Xye9miRB\/Qzp4jJ3b3vrVtlFcTzR0mFefNiuSVjQJoV2khQB4YsSI0Q33q48PP2ZpHhvRErjYXOgkilIr54tJq66n9909UB59A+iD1Ky06UcR3g8kPJTwnIufyZA2PRWiBueIXE5Ou78Sf4rN\/wy9jKApO16ThN1KYnIMP4SVDZ4PKbDMROd7UCzXxGpmKdm8jIFNFcgBrojroaEL2SPqT0Z9cnIQyH+cvyDlZsY0YyCpmx62o285A7tT9hhGZ+aakk0NwslWzQiW0dcRdN6aZ4buWmbv7vlbY8Ed4G1j0ug=="\n * }\n *\/\n $post = json_decode($data, true);\n \/\/\u6570\u636e\uff1aapp\u7528aes\u52a0\u5bc6\u751f\u6210\u7684\n $message = $post['message'];\n \/\/aes\u7684key,\u7531app\u7528rsa_public_key\u751f\u6210\uff0c\u7528base64_encode\u8f6c\u7801\n $rsaJiamiAesKey = base64_decode($post['key']);\n \/\/$rsaJiamiAesKey\n openssl_private_decrypt($rsaJiamiAesKey, $aesKey, openssl_pkey_get_private($rsaPrivateKey));\n \/\/echo $aesKey;die();\n\/\/ $aes = new Aes($config['aes_key'], $config['aes_iv'], $config['aes_method']);\n\/\/ echo base64_encode($aes->encrypt('P@ssw0rd!@#$%^&*()_-+=\u1785\u17c6\u1793\u17bd\u1793\u1791\u1791\u17bd\u179b\u17a2\u1791\u17b7\u1790\u17b7\u1787\u1793\u1780\u17d2\u1793\u17bb\u1784\u1796\u17c1\u179b\u178f\u17c2\u1798\u17bd\u1799'));die();\n \/\/SzYzYUJubU5DZTZ0UUdCclh0UzhrN1pzU1lhKzVLTVBjQWFOZWdQZm51ZUwxYW9nVGlNNzJac1l4SDgxZFMyWGdScTZ4NG85SU05SWttaklmV3FDcmNpajZDMDNzSVN3QVlhRTVWK2JuRE82TmxJZUpMU2NZNndJeGFlNEdKazRSSXhFTzlWekltbFAvSDFWWlFtbjhBPT0=\n \/\/openssl_public_encrypt($config['aes_key'],$aaa,openssl_pkey_get_public($rsaPublicKey));\n \/\/echo base64_encode($aaa);die();\n \/\/hVYlNNbDJleZkhWbqy3L5k1nzTNW4LP8CdrI\/WFxC9Xye9miRB\/Qzp4jJ3b3vrVtlFcTzR0mFefNiuSVjQJoV2khQB4YsSI0Q33q48PP2ZpHhvRErjYXOgkilIr54tJq66n9909UB59A+iD1Ky06UcR3g8kPJTwnIufyZA2PRWiBueIXE5Ou78Sf4rN\/wy9jKApO16ThN1KYnIMP4SVDZ4PKbDMROd7UCzXxGpmKdm8jIFNFcgBrojroaEL2SPqT0Z9cnIQyH+cvyDlZsY0YyCpmx62o285A7tT9hhGZ+aakk0NwslWzQiW0dcRdN6aZ4buWmbv7vlbY8Ed4G1j0ug==\n \/\/\u7528\u89e3\u51fa\u6765\u7684key\u89e3\u6570\u636e\n $aes = new Aes($aesKey, $config['aes_iv'], $config['aes_method']);\n $message = $aes->decrypt($message);\n if (!$aesKey || !$message) {\n echo json_encode([\n 'message' => '',\n 'key' => ''\n ]);\n die();\n }\n \/\/echo $message;die();\n \/\/\u79c1\u94a5\u52a0\u5bc6\n \/\/@todo $config['aes_key']\u8fd9\u4e2a\u53ef\u4ee5\u968f\u673a\u4e00\u4e0b\uff0c\u63d0\u9ad8\u5b89\u5168\u6027\n $newKey=str_random(32);\/\/$config['aes_key']\n $aesNew = new Aes($newKey, $config['aes_iv'], $config['aes_method']);\n openssl_private_encrypt($newKey, $aesKeySecret, $rsaPrivateKey);\n $data = [\n 'message' => ($aesNew->encrypt('success$$' . $message)),\n 'key' => base64_encode($aesKeySecret)\n ];\n echo json_encode($data);\n break;\n default:\n break;\n}\n\nfunction str_random($len){\n $str='abcdefghijklmnopqrstuvwxya1234567890';\n $str=str_shuffle($str);\n return substr($str,0,$len);\n}\n\/**\n * hello hello\n *\n * base64_encode(aes(hello)) ->hello->success$$hello->base64_encode(aes(success$$hello))\n *\n * key: base64_encode(rsa_public(key)) base64_encode(rsa_private(key))\n *\n * @param $config\n * @param $type\n * @param $data\n * @return array|string\n *\/\nfunction jiajiemi($config, $type, $data)\n{\n $rsaPrivateKey = $config['rsa_private_key'];\n $rsaPrivateKey = "-----BEGIN RSA PRIVATE KEY-----\\n" .\n wordwrap($rsaPrivateKey, 64, "\\n", true) .\n "\\n-----END RSA PRIVATE KEY-----";\n\n $rsaPublicKey = $config['rsa_public_key'];\n $rsaPublicKey = "-----BEGIN PUBLIC KEY-----\\n" .\n wordwrap($rsaPublicKey, 64, "\\n", true) .\n "\\n-----END PUBLIC KEY-----";\n\n switch ($type) {\n case 1:\/\/aes\u52a0\u5bc6\n \/\/P@ssw0rd!@#$%^&*()_-+=\u1785\u17c6\u1793\u17bd\u1793\u1791\u1791\u17bd\u179b\u17a2\u1791\u17b7\u1790\u17b7\u1787\u1793\u1780\u17d2\u1793\u17bb\u1784\u1796\u17c1\u179b\u178f\u17c2\u1798\u17bd\u1799\n \/\/l7ZRPfQk0mcFHBHtu4FPWDUc6cpNXpDjL6gntDO9tC4DgfaJtmwE2FTLYlrFn7OIURiJ09MrcxYR2PCQ3IG9oVnRS0iylj5rjT0pkRqT5j6LBcC+uIhTAuOXRvSCyeWTQrlN2FcgwwwtDZHpKv65Jw==\n $aes = new Aes($config['aes_key'], $config['aes_iv'], $config['aes_method']);\n $secretStr = $aes->encrypt($data);\n return base64_encode($secretStr);\n break;\n case 2:\/\/aes\u89e3\u5bc6\n $data = base64_decode($data);\n $aes = new Aes($config['aes_key'], $config['aes_iv'], $config['aes_method']);\n $secretStr = $aes->decrypt($data);\n return $secretStr;\n break;\n case 3:\/\/aes+rsa\uff08\u79c1\u94a5)\u52a0\u5bc6\n \/\/aes\u52a0\u5bc6\u6570\u636edata\n $aes = new Aes($config['aes_key'], $config['aes_iv'], $config['aes_method']);\n $data = $aes->encrypt($data);\n \/\/rsa\u52a0\u5bc6aes_public_key\n\n \/\/KzKthoiCV4Zfy02aJt6iHhN06alBQAp3oYWrN\/nOQj7CW\/eYwu3ccf9BNUXix+7fzkjKj52jfFrs2dBBc9+ANVi\/LlwKZRIm1kfAfe\/jHFWEoMiRwA+1x3NZXyCzIMlluaC+edZisBbfEJIDvJR6ST19rVXKF7ma\/ZAcRrl+2pQ90pJaph3X9E29TO8m9LULbDorhr9UeqWuBr97zDXtyjN2yxGMMbOgUpFUZSAMxAKaaDZ5KnEfi9JbQsW81ryP4kYEY+cnkmVbL59w9mA+CAD1wDDNvZn5RFopj5gYQYys2WeDaZFhaIq0GFEfLmehu3nA6TuAW\/iIv+9PMv8kZA==\n openssl_private_encrypt($config['aes_key'], $aesKeySecret, $rsaPrivateKey);\/\/\u79c1\u94a5\u52a0\u5bc6\n $aesKeySecret = base64_encode($aesKeySecret);\/\/\u52a0\u5bc6\u540e\u7684\u5185\u5bb9\u901a\u5e38\u542b\u6709\u7279\u6b8a\u5b57\u7b26\uff0c\u9700\u8981\u7f16\u7801\u8f6c\u6362\u4e0b\uff0c\u5728\u7f51\u7edc\u95f4\u901a\u8fc7url\u4f20\u8f93\u65f6\u8981\u6ce8\u610fbase64\u7f16\u7801\u662f\u5426\u662furl\u5b89\u5168\u7684\n $data = [\n 'message' => 'success$$' . $data,\n 'key' => 'success$$' . $aesKeySecret\n ];\n return $data;\n break;\n case 4:\/\/aes+rsa(\u516c\u94a5)\u89e3\u5bc6\n $post = json_decode($data, true);\n $message = $post['message'];\n $key = base64_decode($post['key']);\n\n $aes = new Aes($config['aes_key'], $config['aes_iv'], $config['aes_method']);\n $message = $aes->decrypt($message);\n openssl_public_decrypt($key, $decrypted, openssl_pkey_get_public($rsaPublicKey));\/\/\u79c1\u94a5\u52a0\u5bc6\u7684\u7531\u516c\u94a5\u89e3\u5bc6\n $data = [\n 'message' => $message,\n 'key' => $decrypted\n ];\n return $data;\n break;\n case 5:\/\/aes+rsa\uff08\u516c\u94a5)\u52a0\u5bc6\n \/\/aes\u52a0\u5bc6\u6570\u636edata\n $aes = new Aes($config['aes_key'], $config['aes_iv'], $config['aes_method']);\n $data = $aes->encrypt($data);\n \/\/rsa\u52a0\u5bc6aes_public_key\n\n \/\/KzKthoiCV4Zfy02aJt6iHhN06alBQAp3oYWrN\/nOQj7CW\/eYwu3ccf9BNUXix+7fzkjKj52jfFrs2dBBc9+ANVi\/LlwKZRIm1kfAfe\/jHFWEoMiRwA+1x3NZXyCzIMlluaC+edZisBbfEJIDvJR6ST19rVXKF7ma\/ZAcRrl+2pQ90pJaph3X9E29TO8m9LULbDorhr9UeqWuBr97zDXtyjN2yxGMMbOgUpFUZSAMxAKaaDZ5KnEfi9JbQsW81ryP4kYEY+cnkmVbL59w9mA+CAD1wDDNvZn5RFopj5gYQYys2WeDaZFhaIq0GFEfLmehu3nA6TuAW\/iIv+9PMv8kZA==\n openssl_public_encrypt($config['aes_key'], $aesKeySecret, $rsaPublicKey);\/\/\u79c1\u94a5\u52a0\u5bc6\n $aesKeySecret = base64_encode($aesKeySecret);\/\/\u52a0\u5bc6\u540e\u7684\u5185\u5bb9\u901a\u5e38\u542b\u6709\u7279\u6b8a\u5b57\u7b26\uff0c\u9700\u8981\u7f16\u7801\u8f6c\u6362\u4e0b\uff0c\u5728\u7f51\u7edc\u95f4\u901a\u8fc7url\u4f20\u8f93\u65f6\u8981\u6ce8\u610fbase64\u7f16\u7801\u662f\u5426\u662furl\u5b89\u5168\u7684\n $data = [\n 'message' => 'success$$' . $data,\n 'key' => 'success$$' . $aesKeySecret\n ];\n return $data;\n break;\n case 6:\/\/aes+rsa(\u79c1\u94a5)\u89e3\u5bc6\n $post = json_decode($data, true);\n $message = $post['message'];\n $key = base64_decode($post['key']);\n\n $aes = new Aes($config['aes_key'], $config['aes_iv'], $config['aes_method']);\n $message = $aes->decrypt($message);\n openssl_private_decrypt($key, $decrypted, openssl_pkey_get_private($rsaPrivateKey));\/\/\u79c1\u94a5\u52a0\u5bc6\u7684\u7531\u516c\u94a5\u89e3\u5bc6\n $data = [\n 'message' => $message,\n 'key' => $decrypted\n ];\n return $data;\n break;\n default:\n echo '\u672a\u77e5\u7c7b\u578b';\/\/|success\n break;\n }\n}\n\n\n?><\/pre>
<\/p>"}