Maison > Article > développement back-end > Comment gérer le cryptage et le décryptage des données lors de l'implémentation de l'API en PHP
Avec le développement continu d'Internet, le champ d'application de l'API (Application Programming Interface) devient de plus en plus étendu et les interactions de données entre différents systèmes deviennent de plus en plus fréquentes. Pour la transmission de données sensibles, le chiffrement et le décryptage des données sont des étapes essentielles. Cet article expliquera comment gérer le cryptage et le déchiffrement des données lors de la mise en œuvre d'une API basée sur PHP.
1. Pourquoi le cryptage des données est nécessaire
Le cryptage des données fait référence à la conversion du texte brut original en texte chiffré selon un certain algorithme, afin que les personnes qui n'ont pas obtenu la clé correspondante ne puissent pas l'interpréter, garantissant ainsi la confidentialité des données. Dans le développement d'API, les principales raisons du cryptage des données sont les deux points suivants :
Lorsque l'API est ouverte à des tiers, la transmission des données d'interface ne peut pas être garantie dans un environnement de communication privé. Ainsi, la sécurité et l'authenticité des données peuvent être garanties grâce au cryptage pour éviter que les données ne soient volées ou falsifiées pendant la transmission.
Le cryptage des données peut garantir la légalité de la transmission des données grâce à la vérification de l'identité, à la signature, etc. Pendant le processus d'envoi de la demande API, les paramètres de la demande sont cryptés avec des algorithmes irréversibles pour garantir la légitimité de la demande et empêcher toute falsification illégale ou falsification des données de la demande.
2. PHP implémente le cryptage des données
L'algorithme de cryptage symétrique signifie que la clé utilisée pour le cryptage et le déchiffrement est la même. Il vous suffit de transmettre la clé en tant que paramètre pour terminer les opérations de cryptage et de décryptage. . Les algorithmes de chiffrement symétriques couramment utilisés dans le développement d'API incluent DES, 3DES, AES, etc.
En prenant l'algorithme de cryptage AES comme exemple, PHP fournit des fonctions telles que openssl_encrypt() et openssl_decrypt() pour implémenter des opérations de cryptage symétriques. L'utilisation est la suivante :
//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; }
où $data est les données à chiffrer et $key est la clé. Pendant le processus de chiffrement, obtenez la longueur du vecteur IV requise par l'algorithme de chiffrement en appelant openssl_cipher_iv_length(), appelez openssl_random_pseudo_bytes() pour générer un vecteur IV aléatoire, puis appelez la fonction openssl_encrypt() pour effectuer l'opération de chiffrement. Dans le processus de décryptage, le texte chiffré est d'abord restauré en données binaires via la fonction base64_decode(), puis le vecteur IV et les données cryptées sont extraits respectivement, et la fonction openssl_decrypt() est appelée pour effectuer l'opération de décryptage.
L'algorithme de cryptage asymétrique signifie que les clés utilisées pour le cryptage et le déchiffrement sont différentes. Généralement, la clé publique est rendue publique et utilisée pour crypter les données, qui sont ensuite déchiffrées par la clé privée sur le serveur. côté. Dans le développement d'API, les algorithmes de chiffrement asymétriques courants incluent RSA, DSA, etc.
En prenant l'algorithme de cryptage RSA comme exemple, PHP fournit des fonctions telles que openssl_public_encrypt et openssl_private_decrypt pour implémenter des opérations de cryptage asymétriques. L'utilisation est la suivante :
//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; }
Parmi eux, $data sont les données à chiffrer, et $public_key est la clé publique. Pendant le processus de cryptage, les données sont cryptées en appelant la fonction openssl_public_encrypt(), puis les données cryptées sont codées par la fonction base64_encode(). Pendant le processus de décryptage, les données chiffrées sont déchiffrées en appelant la fonction openssl_private_decrypt(), puis les données décryptées sont renvoyées.
3. PHP implémente la signature des données
La légalité de la signature des données dans l'API est vérifiée en hachant les paramètres. Pour les paramètres de requête API, le serveur doit effectuer des signatures de données pour garantir l'intégrité et l'authenticité de la transmission des données.
Les algorithmes de hachage couramment utilisés incluent HMAC, SHA1, MD5, etc. En prenant HMAC comme exemple, la signature de données peut être facilement implémentée à l'aide de la fonction hash_hmac() intégrée de PHP. L'utilisation est la suivante :
//HMAC签名 function hmacSign($data, $secret) { $signed_data = hash_hmac('sha256', $data, $secret, false); return $signed_data; }
Où, $data sont les données à signer et $secret est la clé de signature. Appelez la fonction hash_hmac() pour hacher les données et renvoyer les données signées.
4. Exemples de cryptage et de décryptage de données
Ensuite, nous appliquerons de manière exhaustive les méthodes de cryptage et de signature des données ci-dessus pour démontrer comment utiliser PHP pour terminer le processus de cryptage et de déchiffrement des paramètres de requête API.
//数据加密 $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:处理签名不合法的情况 }
Dans le code ci-dessus, la fonction aesEncrypt() est d'abord utilisée pour crypter symétriquement les paramètres de requête, puis la fonction hmacSign() est utilisée pour hacher les données cryptées afin de générer des paramètres de requête signés. Une fois que le serveur a reçu la demande, il vérifie si la signature est légale en hachant les données de signature, puis utilise la fonction aesDecrypt() pour déchiffrer les données cryptées afin d'obtenir les paramètres de demande d'origine.
Dans le processus de candidature proprement dit, il est nécessaire de s'assurer que les clés de cryptage, les clés de signature et autres informations ne peuvent pas être divulguées pour garantir la sécurité des données de l'API. Dans le même temps, des algorithmes de chiffrement et de signature appropriés doivent être sélectionnés en fonction des exigences d'utilisation du système afin de répondre aux exigences de performances et de sécurité du système.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!