2013-01-02 33 views
1

我已經提交了一個應用程序到Amazon批准,他們回來了這一點:加密Android應用程序的數據發送到MySQL數據庫

「這個程序似乎發送未加密,敏感信息在這種情況下,對E - 郵件和密碼正在以明文發送,請更新應用程序以加密所有敏感信息。「

在服務器端,我使用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

如果你正在做的是用SHA1對密碼進行哈希處理,爲什麼不把它散列在android端,然後發送給PHP? – MrZander

+1

SHA1只是一種哈希算法。 http://stackoverflow.com/questions/4895523/java-string-to-sha1 至於電子郵件,見阿什利羅斯。 – MrZander

回答

3

亞馬遜的要求似乎有點保守,但可以通過HTTPS而不是未加密的HTTP連接到您的Web服務來達到最佳效果。這正是另一個StackOverflow用戶最後做到的:Amazon AppStore Submission Failed: "Sensitive information like password is echoed in clear text without encryption"

雖然您可以加密應用程序中的數據,通過互聯網發送,並使用共享密鑰在服務器上解密,但這對於攻擊者反編譯您的應用程序以獲得密鑰。

或者,您可以生成密鑰對,在應用程序中包含公鑰並使用它加密數據,通過互聯網發送,然後使用服務器上的私鑰解密傳入的數據,基本上只是手動重新實現HTTPS。

在一天結束時,實施亞馬遜要求的「正確」方式是使用HTTPS。其他任何事情都可能難以安全實施。

+0

好的,聽起來就像是要走的路。 – KickingLettuce

相關問題