サーバー/データベースと通信する必要があるAndroidアプリの開発を始めました。サーバー側では、PHP を使用してデータを収集したり、クエリを実行したりします。セキュリティ (XSS、SQL インジェクションなど) についてよく読んでいます。クライアントとサーバーの間で送信されるデータも暗号化したいので、PHP で openssl 関数を扱い始めました。
openssl_seal- および openssl_open-functions は、この目的に適しているようです。私はこれらの2つの関数を書きました:
function encryptRnd($data) {
$pubKey = file_get_contents("public.key");
$publicKeys = array(openssl_pkey_get_public($pubKey));
$res = openssl_seal($data, $encryptedData, $encryptedKeys, $publicKeys);
return array("data" => base64_encode($encryptedData), "rndKey" => base64_encode($encryptedKeys[0]));}
function decryptRnd($credentials) {
$privateKey = openssl_get_privatekey(file_get_contents("private.key"));
$result = openssl_open(base64_decode($credentials["data"]), $decryptedData, base64_decode($credentials["rndKey"]), $privateKey);
if (!$result) echo "ERROR during decryption.\n";
return $decryptedData;}
「a」は (暗号化/暗号化する) データであり、「b」は openssl_seal によって生成され、復号化に使用されるランダムキーです。
2 つのキーファイルは、Windows で以下を使用して作成されています。
- privateKey ファイルの「openssl.exe genrsa -out private.key 1024」
- publicKey ファイルの「openssl.exe rsa -in private.key -out public.pem -outform PEM -pubout」
PHP内では、これはすべて期待どおりに機能します。
しかし、Android で同じ手法を実装するにはどうすればよいでしょうか (私は初心者です!)?
PHP側でopenssl_sealと組み合わせて使用する例をWebで検索しましたが、何も機能していませんでした。
- Android 側でデータを暗号化し、PHP で復号化できるようにしたいと考えています。
- そして、サーバーが暗号化されたデータを送信している場合、これは Android 側で復号化されます (2 つ目の public/privateKey ペアを使用すると仮定します)。
ここに記載されている例も実装しましたが、うまくいきませんでした (openssl_private_decrypt は PHP 側では常に FALSE でした)。だから、それは私を助けませんでしたが、それはAndroid => PHP暗号化だけであり、その逆はありませんでした。
要約すると、受信者のみがデータを復号化できる両側で、Android と PHP の間で送信されるデータを暗号化および復号化する方法を探しています。誰かが私に例や手がかりを与えることができますか?