Maison  >  Article  >  développement back-end  >  Comment utiliser la clé publique et la clé privée générées pour le cryptage et le déchiffrement en PHP

Comment utiliser la clé publique et la clé privée générées pour le cryptage et le déchiffrement en PHP

墨辰丷
墨辰丷original
2018-06-11 14:01:133697parcourir

Cet article présente principalement la méthode de cryptage et de déchiffrement utilisant la clé publique et la clé privée générées en PHP. Les amis intéressés peuvent s'y référer. J'espère qu'il sera utile à tout le monde.

Lorsque le serveur PHP interagit avec le client et fournit une API ouverte, il est généralement nécessaire de chiffrer la partie sensible de la transmission des données de l'API. À ce stade, le chiffrement asymétrique RSA peut s'avérer utile. Expliquez comment utiliser PHP pour implémenter le cryptage et le déchiffrement des données

1 La première étape du cryptage et du déchiffrement consiste à générer une paire de clés publiques et privées. Le contenu crypté par la clé privée peut être déchiffré par le. clé publique (et vice versa)

Téléchargez l'outil open source de génération de clé RSA openssl (généralement les systèmes Linux sont livrés avec ce programme), décompressez-le dans un dossier séparé, entrez dans le répertoire bin et exécutez la commande suivante :

openssl genrsa -out rsa_private_key.pem 1024
openssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt -out private_key.pem
openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem


La première commande génère le fichier de clé privée RSA d'origine rsa_private_key.pem, la deuxième commande convertit la clé privée RSA d'origine au format pkcs8 et la troisième commande génère la clé publique RSA rsa_public_key. pem
On peut voir de ce qui précède qu'il passe La clé privée peut générer la clé publique correspondante, nous utilisons donc la clé privée private_key.pem côté serveur, et la clé publique est distribuée aux frontaux tels que android et ios

2. Utilisez la clé publique et la clé privée générées dans PHP Cryptage et déchiffrement, entrez directement le code

<?php
$private_key = &#39;-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQC3//sR2tXw0wrC2DySx8vNGlqt3Y7ldU9+LBLI6e1KS5lfc5jl
TGF7KBTSkCHBM3ouEHWqp1ZJ85iJe59aF5gIB2klBd6h4wrbbHA2XE1sq21ykja/
Gqx7/IRia3zQfxGv/qEkyGOx+XALVoOlZqDwh76o2n1vP1D+tD3amHsK7QIDAQAB
AoGBAKH14bMitESqD4PYwODWmy7rrrvyFPEnJJTECLjvKB7IkrVxVDkp1XiJnGKH
2h5syHQ5qslPSGYJ1M/XkDnGINwaLVHVD3BoKKgKg1bZn7ao5pXT+herqxaVwWs6
ga63yVSIC8jcODxiuvxJnUMQRLaqoF6aUb/2VWc2T5MDmxLhAkEA3pwGpvXgLiWL
3h7QLYZLrLrbFRuRN4CYl4UYaAKokkAvZly04Glle8ycgOc2DzL4eiL4l/+x/gaq
deJU/cHLRQJBANOZY0mEoVkwhU4bScSdnfM6usQowYBEwHYYh/OTv1a3SqcCE1f+
qbAclCqeNiHajCcDmgYJ53LfIgyv0wCS54kCQAXaPkaHclRkQlAdqUV5IWYyJ25f
oiq+Y8SgCCs73qixrU1YpJy9yKA/meG9smsl4Oh9IOIGI+zUygh9YdSmEq0CQQC2
4G3IP2G3lNDRdZIm5NZ7PfnmyRabxk/UgVUWdk47IwTZHFkdhxKfC8QepUhBsAHL
QjifGXY4eJKUBm3FpDGJAkAFwUxYssiJjvrHwnHFbg0rFkvvY63OSmnRxiL4X6EY
yI9lblCsyfpl25l7l5zmJrAHn45zAiOoBrWqpM5edu7c
-----END RSA PRIVATE KEY-----&#39;;

$public_key = &#39;-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC3//sR2tXw0wrC2DySx8vNGlqt
3Y7ldU9+LBLI6e1KS5lfc5jlTGF7KBTSkCHBM3ouEHWqp1ZJ85iJe59aF5gIB2kl
Bd6h4wrbbHA2XE1sq21ykja/Gqx7/IRia3zQfxGv/qEkyGOx+XALVoOlZqDwh76o
2n1vP1D+tD3amHsK7QIDAQAB
-----END PUBLIC KEY-----&#39;;

//echo $private_key;
$pi_key = openssl_pkey_get_private($private_key);//这个函数可用来判断私钥是否是可用的,可用返回资源id Resource id
$pu_key = openssl_pkey_get_public($public_key);//这个函数可用来判断公钥是否是可用的
print_r($pi_key);echo "\n";
print_r($pu_key);echo "\n";


$data = "aassssasssddd";//原始数据
$encrypted = ""; 
$decrypted = ""; 

echo "source data:",$data,"\n";

echo "private key encrypt:\n";

openssl_private_encrypt($data,$encrypted,$pi_key);//私钥加密
$encrypted = base64_encode($encrypted);//加密后的内容通常含有特殊字符,需要编码转换下,在网络间通过url传输时要注意base64编码是否是url安全的
echo $encrypted,"\n";

echo "public key decrypt:\n";

openssl_public_decrypt(base64_decode($encrypted),$decrypted,$pu_key);//私钥加密的内容通过公钥可用解密出来
echo $decrypted,"\n";

echo "---------------------------------------\n";
echo "public key encrypt:\n";

openssl_public_encrypt($data,$encrypted,$pu_key);//公钥加密
$encrypted = base64_encode($encrypted);
echo $encrypted,"\n";

echo "private key decrypt:\n";
openssl_private_decrypt(base64_decode($encrypted),$decrypted,$pi_key);//私钥解密
echo $decrypted,"\n";

Résumé : Ce qui précède est le tout le contenu de cet article, j'espère qu'il sera utile à l'apprentissage de chacun.

Recommandations associées :

PHP implémente la fonction d'ajout dynamique de filigranes d'image en fonction de l'environnement de couleur

Mécanisme d'événement PHP Principe

PHP implémente la fonction de capture d'images à partir d'albums en ligne avec des paramètres anti-sangsues

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