0

我有一个用 php 编写的 android 和 web 服务。android 有一个身份验证系统,应用程序从该系统将“用户名”和“密码”发送到 web 服务,并将返回用户 ID。然后,我使用用户 ID 通过 Web 服务请求其他信息。

就良好实践而言,上述方法并不安全,我想到了使用会话。但我不知道如何使用它们?你们能给我一些让从android到网络服务的请求更安全的例子吗?

谢谢,

4

2 回答 2

2

您有两个主要选择:

1-SSL在这种情况下与您的网络服务通信,您可以将用户名/密码作为纯文本发送,因为它们无论如何都会被加密

2-用服务器加密用户名/密码,public key所以除了网络服务之外没有人(谁private key可以解密消息)

如果您希望整个通信是安全的(不仅仅是发送用户名/密码),您可以使用symmetric cipher算法(例如AES),因为asymmetric cipher算法(例如RSA)要慢得多并且消耗更多资源。

此外,并不是说您需要将格式转换为public keyDERandroid 使用它,您可以使用openssl

于 2013-02-19T15:34:19.730 回答
0

你可以试试这个

如果您使用 HttpClient 进行发送,则可以将其存储在应用程序对象中并用于将来的请求

import android.app.Application;
import org.apache.http.impl.client.DefaultHttpClient;

public class AppObj extends Application
{
  public static DefaultHttpClient davisimperialclient;

}

在您的登录屏幕中,您必须创建一个 HttpClient

AppObj.davisimperialclient = new DefaultHttpClient();
      HttpPost localHttpPost = new HttpPost(ApplicationLinks.login);
      try
      {
        ArrayList localArrayList = new ArrayList(2);
        localArrayList.add(new BasicNameValuePair("username", this.name));
        localArrayList.add(new BasicNameValuePair("password", this.pass));
        localHttpPost.setEntity(new UrlEncodedFormEntity(localArrayList));
        String  str = EntityUtils.toString(DavisImperialApp.davisimperialclient.execute(localHttpPost).getEntity());
        Log.e("error", str);
        return str;
      }
      catch (Exception localException)
      {


      }

如果登录成功,您可以使用

AppObj.davisimperialclient

用于提出其他要求

该对象将一直存在,直到我们退出应用程序

于 2013-02-19T15:47:50.713 回答