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:
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
As can be seen from the above, through the private key The key can generate the corresponding public key, so we use the private key private_key.pem on the server side, and the public key is distributed to front-ends such as android and ios
$fp=fopen("rsa/rsa_private_key.pem","r"); //Your private key file path
$private_key=fread($fp,8192);
fclose($fp );
$fp1=fopen("rsa/rsa_public_key.pem","r"); //Your public key file path
$public_key=fread($fp1,8192);
fclose($fp1 );
//echo $private_key;
$pi_key=openssl_pkey_get_private($private_key);//This function can be used to determine whether the private key is available and can return the resource id Resource id
$pu_key= openssl_pkey_get_public($public_key);//This function can be used to determine whether the public key is available
print_r($pi_key);echo "n"; echo "
";
print_r($pu_key);echo "n"; echo "
";
echo "< ;hr>";
$data='php ras encryption algorithm';
$encrypted = "";
$decrypted = "";
echo "Encrypted source data: ".$data." n"; echo "
";
echo "private key encrypt:n"; echo "
";
openssl_private_encrypt($data,$encrypted,$pi_key);//private key Encryption
$encrypted = base64_encode($encrypted);//Encrypted content usually contains special characters and requires encoding conversion. When transmitting through URLs between networks, pay attention to whether base64 encoding is URL safe
echo ' After the private key is encrypted: '.$encrypted."n"; echo "
";echo "
";
echo "public key decrypt:n"; echo "
";
openssl_public_decrypt(base64_decode($encrypted),$decrypted,$pu_key);//The content encrypted by the private key can be decrypted by the public key Come out
echo 'After public key decryption:'.$decrypted."n"; echo "
";
echo "
echo "public key encrypt:n"; echo "
";
openssl_public_encrypt($data,$encrypted,$pu_key);//Public key encryption
$encrypted = base64_encode($encrypted );
echo $encrypted,"n"; echo "
";
echo "private key decrypt:n"; echo "
";
openssl_private_decrypt(base64_decode ($encrypted),$decrypted,$pi_key);//Private key decryption
echo $decrypted,"n"; echo "
";
Frequently asked questions about PHP's RSA configuration:
●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 If there are no libeay32.dll and ssleay32.dll files in the directory
, 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 (phpext)
Then please put php_openssl.dll in this folder