3

PHP Webサービスの呼び出しを使用しているAndroidで小さなプロジェクトを開発しています。

Web サービスを保護したいのですが、GET/POST リクエスト メソッドを使用することで、あまり保護されていないと思います。グーグルで調べた後、「phpseclib」にRSA実装があり、適切なドキュメントもあります。しかし、私はとても混乱しているので、これをここに投稿してください。

基本的に私が必要とするのは:

  1. Android から、「暗号化されたパラメーターを 1 つの文字列にマージ」して URL を呼び出します。(最初に json でパラメーターをエンコードし、次に暗号化します)。
  2. これらのパラメーターをphpで抽出し、それに応じて処理します。

json 文字列: {user_id:xyz@gmail.com, passwd: Password!}

に暗号化: XsjkhkjwehrkanmNXmnskjawrhjlljahdhuw

例えば。 http://my.domain.com/webservices/call.php?params=Xsjkhkjwehrkanm,NXmnskjawrhjlljahdhuw PHP では、その $_GET['params"'] からユーザー ID とパスワードを抽出します。

これは b で可能ですase64_encode(), base64_decode(),が、base64 エンコーダーは文字列を難読化するだけで、実際には暗号化しません。

公開/秘密鍵メカニズムが必要です。

ただし、これを試しました:( https://launchkey.com/docs/api/encryption/php/phpseclib )

<?
function rsa_encrypt($key, $message) {
    $rsa = new Crypt_RSA(); 
    $rsa->loadKey($key); 
    $encrypted = base64_encode($rsa->encrypt($message)); 
    return $encrypted;
}
?>

$encrypted 文字列を返さない。

どんな助けでも本当に感謝しています。

ありがとう..!:)

4

2 に答える 2

2

暗号化に慣れていない場合は、コメントで提案されているように、単純なルートで HTTPS を使用する必要があります。

また、コメントで提案されているように、Web ページから GET 経由でパスワードを送信しないでください。これは、アドレス バーに表示され、通行人が画面から読み取ることができるためです。

HTTPS (SSL/TLS) は、Web サーバーとクライアント間の接続全体のエンド ツー エンドの暗号化を提供します。これにより、すべてのデータをクリア テキストで送信できます。データはより低いレベルで暗号化されているため、心配する必要はありません。

Web サーバーを呼び出すのは Web ブラウザーではないため、SSL 証明書に料金を支払う必要さえありません。自己署名証明書を作成できます。中間者攻撃を防ぐために、すべての接続で署名を確認してください. ただし、これは少しトリッキーなので、これに慣れていない場合は、SSL 証明書の料金を支払うだけで、証明書の検証を Android に任せることができます。

あなたの直接の質問に答えて:

お気づきかもしれませんが、エンコーディングは暗号化ではありません。Base64 はエンコーディングであり、セキュリティを提供しません。

単純に RSA 公開鍵と秘密鍵のペアを生成し、秘密鍵でデータを暗号化し、それをサーバーに送信することはできません。まず、公開鍵をサーバーと共有する必要があります。まあ、ネットワークから公開鍵を盗み見れば誰でもそれを復号化できます。

クライアントにランダムな対称キーを生成させ、サーバーの公開キーで暗号化させることができます。サーバーは秘密鍵で暗号化を解除し、共有秘密鍵を使用してデータを暗号化し、送信します。

問題は、攻撃者がすべてのデータをサーバーに単純にリプレイして、同じ出力を表示できることです。これらのランダムなものは、実際にランダムであることを確認するためにサーバーによって生成される必要があるため、サーバーがキーを生成することに行き詰まりますが、サーバーが秘密鍵で単純に暗号化すると、公開鍵を持っている人なら誰でもそれを復号化できます.

したがって、共有秘密鍵を安全に導出する方法、サーバーとクライアントの両方が同じ共有鍵を計算するために使用できるデータを共有する複雑な数学的方法が必要になります。

これは自分で行うこともできますが、SSL を使用するだけで同じことを行うことができる場合、複雑な手順と関数を呼び出すことになります。

于 2013-10-11T12:57:29.573 に答える