Home  >  Article  >  Backend Development  >  Detailed explanation of how to use rsa to implement encryption and decryption code in php

Detailed explanation of how to use rsa to implement encryption and decryption code in php

伊谢尔伦
伊谢尔伦Original
2017-07-08 10:00:552435browse

1, The first step in encryption and decryption is to generate a public key and private key pair. The content encrypted by the private key can be decrypted by the public key(The reverse can also be done )

Download the open source RSA key generation tool openssl (usually Linux systems come with this program), unzip it to a separate folder, enter the bin directory, and execute the following command:

The code is as follows:

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

The first command generates the original RSA private key file rsa_private_key.pem, and the second command converts the original RSA private key to pkcs8 format. Article 3 Generate RSA public key rsa_public_key.pem
It can be seen from the above that the corresponding public key can be generated through the private key, so we use the private key private_key.pem on the server side and issue the public key to androidFollow ios and other front-ends

2. Use the generated public key and private key to encrypt and decrypt in php, directly enter the code

The code is as follows:

$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>";

RSA configuration for PHPFAQ:

●3 in the openssl folder in the code sample for PHP development language How to use a DLL file

1. If your system is a windows system and there are no libeay32.dll and ssleay32.dll files in the system32 file directory
then you need to copy these two files to the system32 file Table of contents.

2. If there is no php_openssl.dll in your php installation directory (php\ext)

, then please put php_openssl.dll in this folder

Friends who like encryption and decryption should read this article carefully and benefit a lot. . .

The above is the detailed content of Detailed explanation of how to use rsa to implement encryption and decryption code in php. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn