インターネットの継続的な発展に伴い、API (アプリケーション プログラミング インターフェイス) の適用範囲はますます広範になり、さまざまなシステム間のデータのやり取りがますます頻繁になってきています。機密データを送信するには、データの暗号化と復号化が不可欠な手順です。この記事では、PHP ベースの API を実装する際のデータの暗号化と復号化の処理方法を紹介します。
1. データ暗号化が必要な理由
データ暗号化とは、元の平文を特定のアルゴリズムに従って暗号文に変換し、対応する鍵を取得していない人には解読できないようにすることを指します。データの機密性。 API 開発において、データ暗号化が必要となる主な理由は次の 2 点です。
API がサードパーティに公開される場合、送信による暗号化が行われます。プライベートな通信環境で実行されることを保証するものではないため、送信プロセス中にデータが盗まれたり改ざんされたりすることを防ぐために、暗号化によってデータのセキュリティと信頼性を確保できます。
データ暗号化により、本人確認や署名などを通じてデータ送信の合法性を保証できます。 API リクエストの送信プロセス中、リクエスト パラメータは不可逆アルゴリズムで暗号化され、リクエストの正当性が保証され、リクエスト データの不正な改ざんや偽造が防止されます。
2. PHP はデータ暗号化を実装します
対称暗号化アルゴリズムとは、暗号化と復号化に使用されるキーが同じであることを意味します。キーをパラメータとして渡すだけで、暗号化と復号化の操作が完了します。 API 開発で一般的に使用される対称暗号化アルゴリズムには、DES、3DES、AES などが含まれます。
AES 暗号化アルゴリズムを例に挙げると、PHP は、対称暗号化操作を実装するための openssl_encrypt() や openssl_decrypt() などの関数を提供します。使用方法は以下の通りです。
//AES加密 function aesEncrypt($data, $key) { $iv_len = openssl_cipher_iv_length('AES-128-CBC'); $iv = openssl_random_pseudo_bytes($iv_len); $encrypted = openssl_encrypt($data, 'AES-128-CBC', $key, OPENSSL_RAW_DATA, $iv); $result = base64_encode($iv . $encrypted); return $result; } //AES解密 function aesDecrypt($data, $key) { $data = base64_decode($data); $iv_len = openssl_cipher_iv_length('AES-128-CBC'); $iv = substr($data, 0, $iv_len); $encrypted = substr($data, $iv_len); $decrypted = openssl_decrypt($encrypted, 'AES-128-CBC', $key, OPENSSL_RAW_DATA, $iv); return $decrypted; }
このうち、$dataは暗号化するデータ、$keyは鍵です。暗号化プロセス中に、openssl_cipher_iv_length() を呼び出して暗号化アルゴリズムに必要な IV ベクトルの長さを取得し、openssl_random_pseudo_bytes() を呼び出してランダムな IV ベクトルを生成してから、openssl_encrypt() 関数を呼び出して暗号化操作を実行します。復号化プロセスでは、まず、base64_decode() 関数によって暗号文がバイナリ データに復元され、次に IV ベクトルと暗号化データがそれぞれ抽出され、openssl_decrypt() 関数が呼び出されて復号化操作が実行されます。
//RSA加密 function rsaEncrypt($data,$public_key) { $encrypted = ''; openssl_public_encrypt($data,$encrypted,$public_key,OPENSSL_PKCS1_PADDING); $encrypted = base64_encode($encrypted); return $encrypted; } //RSA解密 function rsaDecrypt($data,$private_key) { $decrypted = ''; openssl_private_decrypt(base64_decode($data),$decrypted,$private_key,OPENSSL_PKCS1_PADDING); return $decrypted; }
//HMAC签名 function hmacSign($data, $secret) { $signed_data = hash_hmac('sha256', $data, $secret, false); return $signed_data; }
//数据加密 $data = [ 'user_id' => 12345, 'user_name' => 'test', 'timestamp' => time(), ]; $json_data = json_encode($data); $encrypted_data = aesEncrypt($json_data, $encrypt_key); //数据签名 $signature_data = $encrypted_data . $secret_key; $signature = hmacSign($signature_data, $hmac_key); //API请求构造 $params = [ 'data' => $encrypted_data, 'signature'=> $signature, ]; $request_url = 'http://api.example.com' . '?'. http_build_query($params); //API响应解析 $response_data = file_get_contents($request_url); $response_data = json_decode($response_data, true); //数据解密 $encrypted_data = $response_data['data']; $signature_data = $encrypted_data . $secret_key; $signature = $response_data['signature']; if(hmacSign($signature_data, $hmac_key) === $signature) { $json_data = aesDecrypt($encrypted_data, $encrypt_key); $response = json_decode($json_data, true); //TODO:处理API响应数据 } else { //TODO:处理签名不合法的情况 }
以上がPHP で API を実装するときにデータの暗号化と復号化を処理する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。