Recently in the beginning to write a service-side security interface specification, need to use RSA encryption decryption. So try sledgehammer a little bit and make a record.
Environment: Win7 64-bit
PHP 5.6.12
Prototyping tools are required:
OpenSSL download Address: http://slproweb.com/products/Win32OpenSSL.html
I. Installation of OpenSSL
Where to install freely
Second, enter into the bin directory of OPENSLL for private key and public key generation
Generate private key OpenSSL genrsa-out RSA_PRIVATE_KEY.PEM 1024//Generate public key OpenSSL rsa-in rsa_private_key.pem-pubout-out Rsa_public_key. Pem
Copy the private key and public key of the production to your PHP project
Iii. opening the OpenSSL extension for PHP
Open the Extension=php_openssl.dll in the php.ini (remove;)
Iv. PHP encryption and decryption exercises
* @time 2015-10-13 */namespace app\models;class rsacrypt {Const Private_key_file_path = ' App\certificate\rsa_priva Te_key.pem '; Const Public_key_file_path = ' APP\CERTIFICATE\RSA_PUBLIC_KEY.PEM '; /** * RSA Encryption * @param string $orignData * @return String */public static function encode ($orignData) { The path to the key file $privateKeyFilePath = self::P rivate_key_file_path; extension_loaded (' OpenSSL ') or Die (' PHP requires OpenSSL extension support '); (File_exists ($privateKeyFilePath)) or Die (' The file path of the key is incorrect '); Generates a resource type key, and if the contents of the key file are corrupted, the Openssl_pkey_get_private function returns false $privateKey = Openssl_pkey_get_private (file_get_ Contents ($privateKeyFilePath)); ($privateKey) or Die (' key not available '); Encrypt subsequent data for transmission over the network $encryptData = '; Use the private key to encrypt the////////////////////////if (Openssl_private_encrypt ($orignData, $encryptData , $privateKey)) {return $encryptData; } else {die (' encryption failed '); }}/** * RSA decryption * @param string $encryptData * @return String */public static function Decod E ($encryptData) {//the path to the public key file $publicKeyFilePath = self::P ublic_key_file_path; extension_loaded (' OpenSSL ') or Die (' PHP requires OpenSSL extension support '); (File_exists ($publicKeyFilePath)) or Die (' The file path of the public key is incorrect '); Generates a public key of type resource, if the public key file contents are corrupted, the Openssl_pkey_get_public function returns false $publicKey = Openssl_pkey_get_public (file_get_ Contents ($publicKeyFilePath)); ($publicKey) or Die (' public key not available '); The data after decryption $decryptData = '; Decrypts the////////////////////////if (Openssl_public_decrypt ($encryptData, $) with the public key Decryptdata, $publicKey)) {return $decryptData; } else {die (' decryption failed '); } }}
Appendix:
One, a bug was encountered when using the generate private key under win:
Error:
Warning:can ' t open config file:/usr/local/ssl/openssl.cnfloading ' screen ' into random state-donegenerating RSA private Key, 1024x768 bit long modulus.........++++++.........................................++++++unable to write ' random State ' E is 65537 (0x10001)
Workaround:
Do the following in CMD
Set Openssl_conf=c:\openssl-win32\bin\openssl.cfg
Or
Set Openssl_conf=[path-to-openssl-install-dir]\bin\openssl.cfg
Ps:[path-to-openssl-install-dir] for your OpenSSL path
Second, reference materials:
http://php.net/manual/en/book.openssl.php
Http://www.jb51.net/article/64963.htm
Http://stackoverflow.com/questions/16658038/cant-open-config-file-usr-local-ssl-openssl-cnf-on-windows