Home  >  Article  >  php教程  >  Detailed explanation of the use of php rsa encryption and decryption

Detailed explanation of the use of php rsa encryption and decryption

高洛峰
高洛峰Original
2016-12-30 09:17:381533browse

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 (and vice versa)

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

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, the second command converts the original RSA private key to pkcs8 format, and the third command generates the 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 change the private key private_key .pem is used on the server side, and the public key is distributed to front-ends such as android and ios

2. Use the generated public key and private key for encryption and decryption in PHP, and directly upload the code

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

PHP RSA configuration FAQ:

●Usage of three DLL files in the openssl folder in the code example of PHP development language

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

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

then please put php_openssl.dll in this folder

Like Encryption and decryption friends must read this article carefully, it will benefit a lot. . .

For more detailed explanations on the use of php rsa encryption and decryption, please pay attention to 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