加密Android应用程序发送到MySQL DB的数据

时间:2013-01-02 18:39:42

标签: java android security amazon

我已经向亚马逊提交了一个应用程序以供审批,他们回来了:

“此应用似乎正在发送未加密的敏感信息。在这种情况下,电子邮件和密码正在以明文形式发送。请更新应用以加密所有敏感信息。”

在服务器端,我使用sha1()PHP方法(非常标准)加密数据库中的密码。我假设他们想要Java传递的密码/电子邮件字符串在传输到Web服务时被加密。我假设?如果是这种情况,我需要解密数据(特别是电子邮件,因为这需要以纯文本形式存储在我的数据库中。

之前有没有人见过这个亚马逊的询问?我对它的解释是否正确?如果是这样,在Java中有一种方法可以在传输过程中临时加密数据吗?

以下是我如何做的示例:

insertParam = new ArrayList<NameValuePair>();
            insertParam.add(new BasicNameValuePair("Email", Email));
            insertParam.add(new BasicNameValuePair("Password", Password));
            insertParam.add(new BasicNameValuePair("Username", Username));

            try {
                HttpClient httpClient = new DefaultHttpClient();
                HttpPost httpPost = new HttpPost(url_select);

                httpPost.setEntity(new UrlEncodedFormEntity(insertParam));
                HttpResponse httpResponse = httpClient.execute(httpPost);
                HttpEntity httpEntity = httpResponse.getEntity();

                is = httpEntity.getContent();

            }

修改

看起来HTTPS是可行的方法。

1 个答案:

答案 0 :(得分:3)

亚马逊的要求似乎有点保守,但最好通过HTTPS而不是未加密的HTTP连接到您的网络服务。这正是另一个StackOverflow用户最终所做的事情:Amazon AppStore Submission Failed: "Sensitive information like password is echoed in clear text without encryption"

虽然您可以加密应用中的数据,通过互联网发送数据,然后使用共享密钥在服务器上解密,但这很容易受到反编译应用程序以获取密钥的攻击者的攻击。<​​/ p>

或者,您可以生成密钥对,在应用程序中包含公钥并使用该密钥对数据进行加密,通过Internet发送,然后使用服务器上的私钥解密传入的数据,但您需要基本上只是手动重新实现HTTPS。

在一天结束时,实现亚马逊要求的“正确”方式是使用HTTPS。其他任何事情都可能难以安全实施。