Maison  >  Article  >  développement back-end  >  Explication détaillée de la façon d'utiliser rsa pour implémenter le code de cryptage et de déchiffrement en php

Explication détaillée de la façon d'utiliser rsa pour implémenter le code de cryptage et de déchiffrement en php

伊谢尔伦
伊谢尔伦original
2017-07-08 10:00:552491parcourir

1. La première étape du cryptage et du déchiffrement consiste à générer une paire de clé publique et de clé privée. Le contenu crypté par la clé privée peut être déchiffré par la 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 :

Le code est le suivant :

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, et le la deuxième commande convertit la clé privée RSA d'origine au format pkcs8, le troisième élément génère la clé publique RSA rsa_public_key.pem

On peut voir de ce qui précède que la clé publique correspondante peut être générée via la clé privée, nous utilisons donc le privé clé private_key.pem côté serveur, et la clé publique est émise pour
android Travailler avec des frontaux tels que ios

2. Utilisez la clé publique et la clé privée générées. pour chiffrer et déchiffrer en PHP , entrez directement le code

Le code est le suivant :

$fp=fopen("rsa/rsa_private_key.pem","r"); //你的私钥文件路径
$private_key=fread($fp,8192);
fclose($fp);
$fp1=fopen("rsa/rsa_public_key.pem","r"); //你的公钥文件路径
$public_key=fread($fp1,8192);
fclose($fp1);
//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"; echo "<br>";
print_r($pu_key);echo "\n"; echo "<br>";
echo "<hr>";
$data=&#39;php ras加密算法&#39;;
$encrypted = ""; 
$decrypted = ""; 
echo "加密的源数据:".$data."\n"; echo "<br>";
echo "private key encrypt:\n"; echo "<br>";
openssl_private_encrypt($data,$encrypted,$pi_key);//私钥加密 
$encrypted = base64_encode($encrypted);//加密后的内容通常含有
特殊字符
,需要编码转换下,在网络间通过url传输时要注意base64编码是否是url
安全
的 
echo &#39;私钥加密后:&#39;.$encrypted."\n"; echo "<br>";echo "<br>";
echo "public key decrypt:\n"; echo "<br>";
openssl_public_decrypt(base64_decode($encrypted),$decrypted,$pu_key);//私钥加密的内容通过公钥可用解密出来 
echo &#39;公钥解密后:&#39;.$decrypted."\n"; echo "<br>";
echo "<hr>";
echo "public key encrypt:\n"; echo "<br>";
openssl_public_encrypt($data,$encrypted,$pu_key);//公钥加密 
$encrypted = base64_encode($encrypted); 
echo $encrypted,"\n"; echo "<br>";
echo "private key decrypt:\n"; echo "<br>";
openssl_private_decrypt(base64_decode($encrypted),$decrypted,$pi_key);//私钥解密 
echo $decrypted,"\n"; echo "<br>";

Configuration RSA pour PHP FAQ  :

●fichier openssl dans un exemple de code du langage de développement PHP Utilisation des trois fichiers DLL dans le dossier

1. système Windows et il n'y a pas de fichiers libeay32.dll et ssleay32.dll dans le répertoire de fichiers system32

alors vous devez copier ces deux fichiers dans le répertoire de fichiers system32.

2. S'il n'y a pas de php_openssl.dll

dans votre répertoire d'installation php

(phpext), alors veuillez mettre php_openssl.dll dans ce dossier

Les amis qui aiment le cryptage et le décryptage devraient lire attentivement cet article et en bénéficier beaucoup. . .

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