我已经向亚马逊提交了一个应用程序以供审批,他们回来了:
“此应用似乎正在发送未加密的敏感信息。在这种情况下,电子邮件和密码正在以明文形式发送。请更新应用以加密所有敏感信息。”
在服务器端,我使用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是可行的方法。
答案 0 :(得分:3)
亚马逊的要求似乎有点保守,但最好通过HTTPS而不是未加密的HTTP连接到您的网络服务。这正是另一个StackOverflow用户最终所做的事情:Amazon AppStore Submission Failed: "Sensitive information like password is echoed in clear text without encryption"
虽然您可以加密应用中的数据,通过互联网发送数据,然后使用共享密钥在服务器上解密,但这很容易受到反编译应用程序以获取密钥的攻击者的攻击。</ p>
或者,您可以生成密钥对,在应用程序中包含公钥并使用该密钥对数据进行加密,通过Internet发送,然后使用服务器上的私钥解密传入的数据,但您需要基本上只是手动重新实现HTTPS。
在一天结束时,实现亚马逊要求的“正确”方式是使用HTTPS。其他任何事情都可能难以安全实施。