Maison >développement back-end >tutoriel php >Méthodes de cryptage et de décryptage PHP et solutions aux problèmes courants

Méthodes de cryptage et de décryptage PHP et solutions aux problèmes courants

王林
王林original
2023-06-09 13:50:422398parcourir

PHP est un langage de programmation côté serveur populaire largement utilisé dans le développement d'applications Web. Dans les applications pratiques, le cryptage et le décryptage PHP sont des opérations très courantes. Cet article présentera les méthodes courantes de cryptage et de déchiffrement en PHP, ainsi que des solutions aux problèmes courants.

1. Méthode de cryptage

1. Cryptographie symétrique

Le cryptage symétrique est la méthode la plus largement utilisée dans la technologie de cryptage. Cette méthode utilise la même clé pour crypter et déchiffrer les données.

En PHP, les algorithmes de chiffrement symétriques couramment utilisés incluent DES (Data Encryption Standard), 3DES (Triple DES) et AES (Advanced Encryption Standard). Parmi eux, AES est l'algorithme de chiffrement symétrique le plus couramment utilisé. En raison de sa force de chiffrement élevée, de sa vitesse de calcul rapide et de sa bonne sécurité, il est largement utilisé dans de nombreux domaines de la sécurité de l'information.

Ce qui suit est un exemple de cryptage utilisant l'algorithme de cryptage symétrique AES :

<?php
 
$data = 'Hello, world!';  // 待加密的数据
 
$secret_key = '123456';   // 密钥
 
$iv = openssl_random_pseudo_bytes(16);  // 随机向量
 
$encrypted = openssl_encrypt($data, 'AES-256-CBC', $secret_key, 0, $iv); // 加密
 
$decrypted = openssl_decrypt($encrypted, 'AES-256-CBC', $secret_key, 0, $iv); // 解密
 
echo "加密后:" . $encrypted . "<br>解密后:" . $decrypted;
 
?>

2. Cryptographie asymétrique (cryptographie asymétrique)

Le cryptage asymétrique signifie que le cryptage et le déchiffrement utilisent des clés différentes. Il est généralement utilisé pour le cryptage lors de la transmission des données. Par exemple, le protocole HTTPS utilise le cryptage asymétrique pour garantir la transmission sécurisée des données.

En PHP, les algorithmes de chiffrement asymétriques couramment utilisés incluent RSA (Rivest-Shamir-Adleman) et DSA (Digital Signature Algorithm). Parmi eux, RSA est l’un des algorithmes de chiffrement asymétriques les plus couramment utilisés.

Ce qui suit est un exemple de cryptage utilisant l'algorithme de cryptage asymétrique RSA :

<?php
 
$data = 'Hello, world!';  // 待加密的数据
 
$private_key = openssl_pkey_new();  // 生成密钥对
 
openssl_pkey_export($private_key, $private_key_pem);  // 提取密钥对中的私钥
 
$public_key = openssl_pkey_get_details($private_key)['key'];  // 提取密钥对中的公钥
 
openssl_public_encrypt($data, $encrypted, $public_key); // 加密
 
openssl_private_decrypt($encrypted, $decrypted, $private_key); // 解密
 
echo "加密后:" . base64_encode($encrypted) . "<br>解密后:" . $decrypted;
 
?>

2. Méthode de décryptage

Le décryptage est le processus de restauration des données cryptées et de restauration du contenu des données d'origine.

En PHP, comme dans l'exemple ci-dessus, vous pouvez utiliser la fonction openssl_decrypt pour décrypter les données cryptées à l'aide d'un algorithme de cryptage symétrique (si un algorithme de cryptage asymétrique est utilisé, utilisez la fonction openssl_private_decrypt). Lors de l’opération de décryptage, la même clé et le même vecteur aléatoire sont nécessaires pour décrypter les données.

3. Solutions aux problèmes courants

1. Le décryptage échoue

Si le décryptage échoue, vous devez vérifier les aspects suivants :

(1) Si la clé est correcte : la clé et le vecteur aléatoire du cryptage symétrique doivent être cohérent. Sinon, des erreurs de décryptage ou des échecs de décryptage se produiront.

(2) Si les données ont été falsifiées : si les données cryptées sont falsifiées pendant la transmission, le décryptage est susceptible d'échouer. Des signatures numériques ou des codes d'authentification de message peuvent être utilisés pour vérifier l'intégrité des données.

(3) Si l'algorithme de cryptage est correct : si les algorithmes utilisés pour le cryptage et le décryptage sont incohérents, le décryptage échouera également.

2. Force de cryptage

Lorsque la méthode de cryptage utilisée dans PHP crypte les données, vous devez choisir la force de cryptage appropriée. Un niveau de chiffrement trop faible peut rendre les données chiffrées vulnérables aux attaques, tandis qu'un niveau de chiffrement trop fort peut ralentir les opérations de chiffrement et de déchiffrement. Par conséquent, un choix raisonnable de force de cryptage est nécessaire.

Habituellement, l'utilisation d'une force de cryptage plus forte peut être utilisée comme moyen de confidentialité des données. Par exemple, l'algorithme AES-256-CBC utilise une clé plus forte.

3. Signature numérique

La signature numérique est une technologie qui prouve la source et l'intégrité du contenu d'un message en utilisant la technologie de cryptage et de hachage. Au cours du processus de signature numérique, l'expéditeur utilise sa propre clé privée pour chiffrer le contenu du message, et le destinataire utilise la clé publique de l'expéditeur pour déchiffrer les données et vérifier leur intégrité.

En PHP, vous pouvez utiliser la fonction openssl_sign et la fonction openssl_verify pour implémenter la fonction de signature numérique.

4. Code d'authentification de message (MAC)

Le code d'authentification de message (MAC) est une technique utilisée pour vérifier l'intégrité d'un message en hachant le message à l'aide d'une clé, puis en ajoutant le résultat au message. Une fois que le destinataire a reçu le message, il recalcule la valeur de hachage et compare le résultat avec le message pour vérifier l'intégrité du message.

En PHP, vous pouvez utiliser la fonction hash_hmac pour calculer le MAC.

Ce qui précède présente les méthodes de cryptage et de déchiffrement couramment utilisées en PHP et les solutions aux problèmes courants. Dans le processus de candidature proprement dit, des facteurs tels que la méthode de cryptage, la force du cryptage, la signature numérique et le code d'authentification des messages doivent être pris en compte de manière exhaustive et configurés en fonction des besoins spécifiques.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn