Maison  >  Article  >  développement back-end  >  Comment faire du chiffrement symétrique et asymétrique en PHP ?

Comment faire du chiffrement symétrique et asymétrique en PHP ?

WBOY
WBOYoriginal
2023-05-21 15:10:402422parcourir

Dans le domaine de la sécurité des réseaux, la technologie de cryptage est un moyen technique très important, qui permet de crypter et de décrypter les données pour assurer la sécurité des données. En tant que langage de programmation côté serveur populaire, PHP prend également en charge le cryptage symétrique et asymétrique pour répondre aux besoins de différents scénarios d'application.

  1. Cryptage symétrique

Le cryptage symétrique fait référence à une méthode de cryptage qui utilise la même clé pour le cryptage et le déchiffrement. Il existe de nombreux algorithmes de chiffrement symétriques, tels que DES, 3DES, AES, etc. En PHP, le chiffrement symétrique peut être implémenté à l'aide des fonctions fournies par la bibliothèque d'extension mcrypt.

L'exemple de code est le suivant :

$key = '123456789'; // 密钥
$data = 'Hello World'; // 待加密字符串
$iv = mcrypt_create_iv(mcrypt_get_block_size(MCRYPT_DES, MCRYPT_MODE_CBC), MCRYPT_RAND);
$cipher = mcrypt_encrypt(MCRYPT_DES, $key, $data, MCRYPT_MODE_CBC, $iv);
echo base64_encode($cipher); // 输出加密后的字符串

Dans le code ci-dessus, le cryptage DES est effectué via la fonction mcrypt_encrypt et le mode MCRYPT_MODE_CBC est utilisé pour le remplissage. $key est la clé du chiffrement symétrique, $data est la chaîne de texte en clair à chiffrer et $iv est un vecteur d'initialisation aléatoire.

L'exemple de code de décryptage est le suivant :

$cipher = base64_decode('JnFXVC9e+rzR8oUgM67Q0w=='); // 加密后的字符串
$key = '123456789'; // 密钥
$iv = mcrypt_create_iv(mcrypt_get_block_size(MCRYPT_DES, MCRYPT_MODE_CBC), MCRYPT_RAND);
$plain = mcrypt_decrypt(MCRYPT_DES, $key, $cipher, MCRYPT_MODE_CBC, $iv);
echo $plain; // 输出解密后的字符串
  1. Cryptage asymétrique

Les algorithmes de cryptage asymétriques nécessitent une paire de clés pour le cryptage et le déchiffrement, où la clé publique peut être rendue publique, tandis que la clé privée doit être gardée secrète. Les algorithmes de chiffrement asymétriques couramment utilisés incluent RSA, DSA, etc. En PHP, le chiffrement asymétrique peut être implémenté à l'aide des fonctions fournies par la bibliothèque d'extension openssl.

L'exemple de code est le suivant :

$data = 'Hello World'; // 待加密字符串
$res = openssl_pkey_new(); // 生成密钥对
openssl_pkey_export($res, $privateKey); // 获取私钥
$publicKey = openssl_pkey_get_details($res)["key"]; // 获取公钥
openssl_public_encrypt($data, $cipher, $publicKey); // 加密数据
echo base64_encode($cipher); // 输出加密后的字符串

Dans le code ci-dessus, utilisez d'abord la fonction openssl_pkey_new pour générer une paire de clés publiques et privées, puis utilisez la fonction openssl_public_encrypt pour crypter les données. La $publicKey obtenue à ce moment peut être rendue publique, mais la $privateKey doit être gardée secrète.

L'exemple de code de décryptage est le suivant :

$cipher = base64_decode('RvnOeNe+p8LtlpuUcq0wqFoX2yUaGXvY6FHlWpT0NQwzVQwVcDSnkw4C6YJMvnsMH4N5JDP18RI8x7CFqUCdJg=='); // 加密后的字符串
$privateKey = '-----BEGIN PRIVATE KEY-----
...
-----END PRIVATE KEY-----'; // 私钥
openssl_private_decrypt($cipher, $plain, $privateKey); // 解密数据
echo $plain; // 输出解密后的字符串

Dans le code ci-dessus, utilisez d'abord la fonction openssl_pkey_export pour obtenir la forme de chaîne de la clé privée, puis utilisez la fonction openssl_private_decrypt pour décrypter les données cryptées et obtenir le texte brut d'origine.

Résumé :

Grâce à l'introduction ci-dessus, nous avons appris qu'en PHP, vous pouvez utiliser les bibliothèques d'extensions mcrypt et openssl pour implémenter le cryptage symétrique et asymétrique. Pour différentes exigences de chiffrement dans les scénarios d’application, nous pouvons choisir de manière flexible d’utiliser différents algorithmes et méthodes de chiffrement. Bien entendu, pendant le processus de cryptage lui-même, nous devons également prêter attention à la protection et à la gestion des clés pour garantir la sécurité des données.

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