{"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>"}