ホームページ  >  記事  >  バックエンド開発  >  生成された公開キーと秘密キーを PHP での暗号化と復号化に使用する方法

生成された公開キーと秘密キーを PHP での暗号化と復号化に使用する方法

墨辰丷
墨辰丷オリジナル
2018-06-11 14:01:133705ブラウズ

この記事では、PHP で生成された公開キーと秘密キーを暗号化および復号化に使用する方法を主に紹介します。興味のある方はぜひ参考にしてください。

PHP サーバーがクライアントと対話してオープン API を提供する場合、通常、API データ送信の機密部分を暗号化する必要があります。このとき、rsa 非対称暗号化が役に立ちます。 PHP を使用してデータの暗号化と復号化を実装する方法について説明します。

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 で暗号化と復号化に使用し、コードに直接移動します。

<?php
$private_key = &#39;-----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-----&#39;;

$public_key = &#39;-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC3//sR2tXw0wrC2DySx8vNGlqt
3Y7ldU9+LBLI6e1KS5lfc5jlTGF7KBTSkCHBM3ouEHWqp1ZJ85iJe59aF5gIB2kl
Bd6h4wrbbHA2XE1sq21ykja/Gqx7/IRia3zQfxGv/qEkyGOx+XALVoOlZqDwh76o
2n1vP1D+tD3amHsK7QIDAQAB
-----END PUBLIC KEY-----&#39;;

//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";
print_r($pu_key);echo "\n";


$data = "aassssasssddd";//原始数据
$encrypted = ""; 
$decrypted = ""; 

echo "source data:",$data,"\n";

echo "private key encrypt:\n";

openssl_private_encrypt($data,$encrypted,$pi_key);//私钥加密
$encrypted = base64_encode($encrypted);//加密后的内容通常含有特殊字符,需要编码转换下,在网络间通过url传输时要注意base64编码是否是url安全的
echo $encrypted,"\n";

echo "public key decrypt:\n";

openssl_public_decrypt(base64_decode($encrypted),$decrypted,$pu_key);//私钥加密的内容通过公钥可用解密出来
echo $decrypted,"\n";

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

openssl_public_encrypt($data,$encrypted,$pu_key);//公钥加密
$encrypted = base64_encode($encrypted);
echo $encrypted,"\n";

echo "private key decrypt:\n";
openssl_private_decrypt(base64_decode($encrypted),$decrypted,$pi_key);//私钥解密
echo $decrypted,"\n";

概要: 上記は全体です。この記事の内容が皆さんの学習に役立つことを願っています。

関連する推奨事項:

PHP は、色環境に応じて画像の透かしを動的に追加する機能を実装します

PHP イベント メカニズムの原理

PHP は、アンチリーチ設定を使用してオンライン アルバムから写真をキャプチャする機能を実装します

以上が生成された公開キーと秘密キーを PHP での暗号化と復号化に使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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