PHP rsa 暗号化と復号化の例

WBOY
WBOYオリジナル
2016-06-23 13:41:43804ブラウズ

1. 暗号化と復号化の最初のステップは、公開キーと秘密キーのペアを生成することです。秘密キーで暗号化されたコンテンツは、公開キーで復号化できます (逆も同様です)。

オープン ソースの RSA キーをダウンロードします。 openssl 生成ツール (通常は Linux システム (すべてこのプログラムに付属) を使用し、それを別のフォルダーに解凍し、bin ディレクトリに入り、次のコマンドを実行します:

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 形式に変換し、3 番目の項目は RSA 公開鍵 rsa_public_key.pem を生成します
上記から、対応する公開鍵は秘密鍵を通じて生成できることがわかります。そのため、秘密鍵 private_key を使用します.pem をサーバー側に配置し、公開鍵を Android や iOS などのフロントエンドに配布します

2. 生成された公開鍵と秘密鍵を php での暗号化と復号に使用し、コードを直接アップロードします

    $private_key = '-----RSA 秘密鍵を開始-----
  1. MIICXQIBAAKBgQC3/ /SR2TXWRC2Dysx8vNGLQT3Y7LDU9+LBLI6E1KS5LFC5JL
  2. TGF7KBTSKBM3OUEHWQP1ZJ85GIB2KLBD6 H4WRBBHA2XE1SQ21ykja/
  3. /IRIA3ZQFXGV/QEKYGOX+XALVoolzqdwh76O2N1VP1D+TD3AMHSK7QIDAQAB
  4. AOGBAKH14BMITESQD4PYWODWOPECLJVKB7IKRVXVDKP1X IJNGKH h2HSYHQSLPSLPS GYJ1M/XKDNGINWALVD3BOKKGKG1BZN7PXT+HERQXAVWS6
  5. Lhakea3pWGPVXGLIWL
  6. 3H7QlyzlrlrlRBFRURN4Cyl4uyaakokKavzly04glle8yCGOC2DZL4EIL4L/+X/Gaq
  7. Deju M6usqowybewhyyhh /OTV1A3SQCCCE1F+
  8. qbAclCqeNiHajCcDmgYJ53LfIgyv0wCS54kCQAXaPkaHclRkQlAdqUV5IWYyJ25f
  9. oiq+Y8SgCCs73qixrU1YpJy9yKA/meG9smsl4Oh9IOIGI+zU ygh9YdSmEq0CQQC2
  10. 4G3IP2G3lNDRdZIm5NZ7PfnmyRabxk/UgVUWdk47IwTZHFkdhxKfC8QepUhBsAHL
  11. QjifGXY4eJKUBm3FpDGJAkAFwUxYssiJjvrHwnHFbg0 rFkvvY63OSm nRxiL4X6EY
  12. yI9lblCsyfpl25l7l5zmJrAHn45zAiOoBrWqpM5edu7c
  13. --- --END RSA 秘密鍵-----'
  14. $public_key = '-- ---BEGIN 公開鍵-----
  15. MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC3//sR2tXw0wrC2DySx8vNGlqt
  16. 3Y7ldU9+LBLI6e1KS5lfc5jlTGF7KBTSkCHBM3ouEHWq p1ZJ85iJe59aF5gIB2kl
  17. Bd6h4wrbbHA2XE1sq21ykja/ Gqx7/IRia3zQfxGv/qEkyGOx+XALVoOlZqDwh76o
  18. 2n1vP1D+tD3amHsK7QIDAQAB
  19. -----END PUBLIC KEY-- ---';
  20. //echo $private_key;
  21. $pi_key=openssl_pkey_get_private($private_key); //この関数は、秘密鍵が利用可能かどうかを判断するために使用でき、リソース ID を返すことができます リソース ID
  22. $pu_key= openssl_pkey_get_public($public_key);//この関数は、公開鍵が利用可能かどうかを判断するために使用できます
print_r($pi_key);echo "n"; echo "
";

print_r($pu_key); echo "
";
echo "


";
$data='php ras 暗号化アルゴリズム';$encrypted = "";


echo "暗号化されたソース データ: "
";
echo "private key encrypt:n"; echo "
";

openssl_private_encrypt($data,$encrypted,$pi_key );//秘密鍵暗号化

$encrypted =base64_encode($encrypted);//暗号化されたコンテンツ通常、ネットワーク間で URL を介して送信する場合は、base64 エンコードが URL に安全であるかどうかに注意してください。 echo 'After private key encrypted:'.$encrypted."n"; ;echo "
";

echo "public key decrypt:n"; echo "
" ;
openssl_public_decrypt(base64_decode($encrypted),$decrypted,$pu_key);// によって暗号化されたコンテンツ秘密鍵は公開鍵で復号できます
echo '公開鍵復号後:'.$decrypted."n"; echo "
";
echo "


";


echo " public key encrypt:n"; echo "
";

openssl_public_encrypt($data,$encrypted,$pu_key);// 公開鍵暗号化
$encrypted =base64_encode($encrypted);
echo $encrypted,"n "; echo "
";

echo "private key decrypt:n"; echo "
";

openssl_private_decrypt(base64_decode($encrypted),$decrypted,$pi_key);//秘密キーの復号化

echo $decrypted,"n"; echo "
";





声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。