ホームページ >バックエンド開発 >PHPチュートリアル >PHP RSA 暗号化と復号化の例
転載元: http://orangeholic.iteye.com/blog/2161771
参考: http://blog.csdn.net/clh604/article/details/20224735
1. 鍵と公開鍵を生成します
開始する前に、openssl 環境を準備する必要があります
Linux には openssl ツール パッケージ、ポータルをインストールする必要があります
http://www.openssl.org/source/
ウィンドウ、ポータルの下に openssl プログラムをインストールする必要があります
http://slproweb.com/products/Win32OpenSSL.html
インストールしたくない場合は、この例で提供されているキーと公開キーをテストに使用できます。
鍵の生成
openssl genrsa は、rsa 秘密鍵ファイルの生成に使用されます。秘密鍵の長さとパスワード保護は、生成時に指定できます。特定のパラメーターについては、ドキュメントを参照してください。
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
最初のコマンドは、元の RSA 秘密キー ファイル rsa_private_key.pem を生成します。2 番目のコマンドは、元の RSA 秘密キーを pkcs8 形式に変換し、ファイル名 private_key.pem で秘密キーを出力します。3 番目のコマンドは、秘密キーに基づいて対応する RSA を生成します。公開鍵 rsa_public_key.pem
上記から、対応する公開鍵は秘密鍵を介して生成できることがわかります。そのため、サーバー側では秘密鍵private_key.pemを使用し、公開鍵はandroidやiosなどのフロントエンドに発行されます。逆も同様です。コピーする場合は、openssl バックエンドのコンテンツのみをコピーします。
2.PHP は RSA 暗号化と復号化を使用します
開始する前に、php openssl 環境を準備し、PHP openssl 拡張機能を有効にし、ウィンドウ内の php 設定ファイル php.ini の
を変更する必要があります。
;extension=php_openssl.dll
に変更します
extension=php_openssl.dll
コードは次のとおりです:
<code><span><span><?php</span><span>$private_key</span> = <span>'-----BEGIN RSA PRIVATE KEY----- MIICXQIBAAKBgQC3//sR2tXw0wrC2DySx8vNGlqt3Y7ldU9+LBLI6e1KS5lfc5jl TGF7KBTSkCHBM3ouEHWqp1ZJ85iJe59aF5gIB2klBd6h4wrbbHA2XE1sq21ykja/ Gqx7/IRia3zQfxGv/qEkyGOx+XALVoOlZqDwh76o2n1vP1D+tD3amHsK7QIDAQAB AoGBAKH14bMitESqD4PYwODWmy7rrrvyFPEnJJTECLjvKB7IkrVxVDkp1XiJnGKH 2h5syHQ5qslPSGYJ1M/XkDnGINwaLVHVD3BoKKgKg1bZn7ao5pXT+herqxaVwWs6 ga63yVSIC8jcODxiuvxJnUMQRLaqoF6aUb/2VWc2T5MDmxLhAkEA3pwGpvXgLiWL 3h7QLYZLrLrbFRuRN4CYl4UYaAKokkAvZly04Glle8ycgOc2DzL4eiL4l/+x/gaq deJU/cHLRQJBANOZY0mEoVkwhU4bScSdnfM6usQowYBEwHYYh/OTv1a3SqcCE1f+ qbAclCqeNiHajCcDmgYJ53LfIgyv0wCS54kCQAXaPkaHclRkQlAdqUV5IWYyJ25f oiq+Y8SgCCs73qixrU1YpJy9yKA/meG9smsl4Oh9IOIGI+zUygh9YdSmEq0CQQC2 4G3IP2G3lNDRdZIm5NZ7PfnmyRabxk/UgVUWdk47IwTZHFkdhxKfC8QepUhBsAHL QjifGXY4eJKUBm3FpDGJAkAFwUxYssiJjvrHwnHFbg0rFkvvY63OSmnRxiL4X6EY yI9lblCsyfpl25l7l5zmJrAHn45zAiOoBrWqpM5edu7c -----END RSA PRIVATE KEY-----'</span>; <span>$public_key</span> = <span>'-----BEGIN PUBLIC KEY----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC3//sR2tXw0wrC2DySx8vNGlqt 3Y7ldU9+LBLI6e1KS5lfc5jlTGF7KBTSkCHBM3ouEHWqp1ZJ85iJe59aF5gIB2kl Bd6h4wrbbHA2XE1sq21ykja/Gqx7/IRia3zQfxGv/qEkyGOx+XALVoOlZqDwh76o 2n1vP1D+tD3amHsK7QIDAQAB -----END PUBLIC KEY-----'</span>; <span>//echo $private_key;</span><span>$pi_key</span> = openssl_pkey_get_private(<span>$private_key</span>);<span>//这个函数可用来判断私钥是否是可用的,可用返回资源id Resource id</span><span>$pu_key</span> = openssl_pkey_get_public(<span>$public_key</span>);<span>//这个函数可用来判断公钥是否是可用的</span> print_r(<span>$pi_key</span>);<span>echo</span><span>"\n"</span>; print_r(<span>$pu_key</span>);<span>echo</span><span>"\n"</span>; <span>$data</span> = <span>"aassssasssddd"</span>;<span>//原始数据</span><span>$encrypted</span> = <span>""</span>; <span>$decrypted</span> = <span>""</span>; <span>echo</span><span>"source data:"</span>,<span>$data</span>,<span>"\n"</span>; <span>echo</span><span>"private key encrypt:\n"</span>; openssl_private_encrypt(<span>$data</span>,<span>$encrypted</span>,<span>$pi_key</span>);<span>//私钥加密</span><span>$encrypted</span> = base64_encode(<span>$encrypted</span>);<span>//加密后的内容通常含有特殊字符,需要编码转换下,在网络间通过url传输时要注意base64编码是否是url安全的</span><span>echo</span><span>$encrypted</span>,<span>"\n"</span>; <span>echo</span><span>"public key decrypt:\n"</span>; openssl_public_decrypt(base64_decode(<span>$encrypted</span>),<span>$decrypted</span>,<span>$pu_key</span>);<span>//私钥加密的内容通过公钥可用解密出来</span><span>echo</span><span>$decrypted</span>,<span>"\n"</span>; <span>echo</span><span>"---------------------------------------\n"</span>; <span>echo</span><span>"public key encrypt:\n"</span>; openssl_public_encrypt(<span>$data</span>,<span>$encrypted</span>,<span>$pu_key</span>);<span>//公钥加密</span><span>$encrypted</span> = base64_encode(<span>$encrypted</span>); <span>echo</span><span>$encrypted</span>,<span>"\n"</span>; <span>echo</span><span>"private key decrypt:\n"</span>; openssl_private_decrypt(base64_decode(<span>$encrypted</span>),<span>$decrypted</span>,<span>$pi_key</span>);<span>//私钥解密</span><span>echo</span><span>$decrypted</span>,<span>"\n"</span>;</span></code>
結果:
<code>原数据为<span>:</span>我的帐号是<span>:shiki</span>,密码是<span>:matata</span> 加密成功,加密后数据(base64_encode后)为<span>:X6q/u/hUW4o7z0tETaWuRt3ahvgT9/m+yiqABDDs9ccHRekB0YU9UAv5zA/VZawLoDVhiyl9bAc3WHeRIexz+gybUJKkI69RFkWHL5n3llfCeTdnSXIQ4Aa+ysfmCicxXwMeP2vUWZBcxJiRVLiGGe1shJjw/TxvmocOlaFRVnQ=</span> 解密成功,解密后数据为<span>:</span>我的帐号是<span>:shiki</span>,密码是<span>:matata</span></code>
上記では、PHP RSA 暗号化と復号化の例を、関連する内容も含めて紹介しています。PHP チュートリアルに興味のある友人に役立つことを願っています。