ホームページ >バックエンド開発 >PHPチュートリアル >JSON文字列の非対称暗号化の問題

JSON文字列の非対称暗号化の問題

WBOY
WBOYオリジナル
2016-06-23 14:19:171193ブラウズ

この投稿は gwrc_s_d_n によって最終編集されました: 2013-08-12 10:20:07

最近の別のプロジェクトでは、PHP で http リクエストを送信し、非対称暗号化を使用する必要があります。暗号化する必要がある部分は json 文字列です。
現在のテストの問題は、公開キーを直接使用して JSON 文字列を暗号化し、サーバーに送信すると、復号化が失敗することです (base64_encode を使用して暗号化すると、クライアントは暗号化をテストし、通常どおり復号化します)。これをサーバーに送信すると、復号化が成功します(これが少し面倒です。json を一度 Base64 にし、暗号化後に再度 Base64 にする必要があります)。

お聞きしたいのですが、json 文字列は直接暗号化すべきではないでしょうか?それとも HTTP リクエストの送信に何か問題があるのでしょうか?リクエストは、fsockopen を直接使用するのではなく、http_client を使用して行われます。


$data['username'] = 'test133ed';
$data['content'] = Base64_encode(json_encode(array('brid' => '22228222883956', 'money' => 10000000, 'time ' => time()))); //ここでbase64_encodeが使用されていない場合、それに渡されても復号化されません
openssl_sign($data['content'], $data['sign'], $privkey );

openssl_public_encrypt( $data['sign'], $sign, $serverkey);
$data['sign'] = Base64_encode($sign);

openssl_public_encrypt($data['content'] ['コンテンツ'], $serverkey);
$data['コンテンツ'] =base64_encode($data['コンテンツ']);

$pageContents = HttpClient::quickPost('http://www.test.t :80/index.php /agent/store', $data);
$result =explode(',', $pageContents);

ディスカッションへの返信 (解決策)

HttpClient: :quickPost この機能はどこの会社ですか?

一般に、base64 以降は可能ですが、元のデータには制御文字 (非表示) が含まれているため、文字列モードで渡すとバイト モードに変更する必要があります。使用しているモジュールの説明に、openssl についてはあまり知りません

HttpClient::quickPost 私がダウンロードしたバージョンにはありますが、静的ではないので、静的に変更しました。

本当にわかりません、
送信の問題であれば、送信前に暗号化データを Base64 エンコードしたので、制御文字は存在しないはずです。
openssl rsa が json 文字列を暗号化できない場合、クライアントでそれを復号化するのが通常ですか?

http プロトコルは投稿データをエンコードします。サーバーはまず投稿データをデコードしてから復号化する必要があります。

http は投稿をエンコードせず、単に get 値に似た文字列であるようです。送信された http リクエスト パケットを見てください

Base64 が必要かどうかは、些細な問題ではなく、アルゴリズムによって決定されます

何か間違ったことをしたかどうかを判断するには、各ステップの計算結果を追跡する必要があります


少なくとも json_encode の後は json 文字列二重引用符がたくさん含まれていますが、暗号化アルゴリズムに影響しないことはどうやってわかりますか?

暗号化後はローカルで復号化するのが通常なので、暗号化で二重引用符を暗号化できないのは意味がないと思います。トランスミッションの問題の可能性がさらに大きくなります。しかし、パケットを確認したりキャプチャしたりする方法がわかりません。

http は投稿をエンコードしていないようで、値の取得に似た単なる文字列です。送信された http リクエスト パケットを見てください

もちろん、urlencode より大きいものはすべてエンコードされます。

Base64 以降は問題がないのはなぜですか? Base64 以降はすべて

http は投稿をエンコードしていないようで、取得値に似た文字列だけです。送信された http リクエスト パッケージを確認してください。

受信する場合は、base64 で再度暗号化します。送信メディアに問題はありません。

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