2012-02-28 56 views
0

我很堅持這一點。我的應用程序中有用於Javamail的用戶名和密碼,然而,我當然不希望將它們作爲純文本保留下來,並有可能使我的應用程序反編譯和梳理。加密/解密信息在運行時

有幾個人建議我研究非對稱加密(可能使用BouncyCastle);但我仍然不知道這將如何完全有所幫助。

我沒有太多密碼學方面的經驗,所以請耐心等待:如果我使用的是公鑰/私鑰對,並且希望我的應用程序能夠讀取字符串 - 那麼解密關鍵是「公鑰」,但這對我來說並沒有意義,因爲它完全破壞了加密的目的。如果我有加密密鑰作爲「公鑰」,那麼我的所有應用程序都可以加密字符串 - 不解密它。

所以在這裏我的問題是:

  • 1)是我的推理有缺陷的呢?
  • 2)如何解決這個困境?
+0

有趣。就我個人而言,我沒有看到在一個應用程序中保留'祕密'和'加密'部分的方法,因爲它違反了主要的加密原則。但讓我們等待答案。 – 2012-02-28 02:47:53

回答

1

如果您想將它們存儲在應用程序中,最好的辦法是對它們進行混淆。加密是這樣做的一種方式,但它只會阻止偶然的「黑客」。如果您將字符串作爲資源(或類字段)進行加密,爲了解密它們,您需要在應用程序中使用密鑰。如果有人會反編譯你的應用程序,那麼也很容易找到密鑰。您可以通過從代碼中的不同位置動態生成密鑰來使其變得更加困難,但是,如上所述,攻擊者只需找到祕密使用的位置並轉儲已解密的響應即可。真的沒有簡單的辦法。

您可以構建一個簡單的Web服務,需要使用Google帳戶進行身份驗證(幾乎每個Android用戶都在其設備上進行身份驗證),並讓其代表用戶發送郵件(如果這符合您的要求)。這樣,您至少知道是誰在發送郵件,並在他們嘗試將其用於垃圾郵件,超過配額等時阻止他們。當然,他們可以輕鬆獲得新的Google帳戶,但如果您的服務是有目的的有針對性的你會有更大的問題。另一個缺點是您的應用需要權限才能訪問設備上的帳戶,有些用戶可能會將其視爲隱私問題。

+0

感謝您的輸入;這幾乎是我所假設的。我試圖看到它的方式是「如果我打開代碼源代碼」,那麼我可能會做任何事情來添加到我的投資組合中。我決定寫一個簡短的PHP腳本,並使用mail()函數來做我想做的事情;只需使用Android的HttpClient來傳遞信息即可。 – 2012-02-28 13:59:35

1

改寫您的問題,您希望您的應用程序能夠訪問您的用戶應該無法訪問的敏感信息。簡短的回答:找到另一個項目,因爲這不會保護你的祕密。你最好的選擇是在你確定是安全的機器上提供代理服務;讓它保存你的祕密,並讓你的應用程序聯繫代理的所有需要​​做的事情。

您表達瞭解密的主要關注點,以發現您的祕密。可以說加密在這裏是可行的(不是)。如果我戴上黑帽,我會反編譯,找到在其參數中接收解密數據的API調用,並添加其他代碼以輸出此數據,或者在此處設置斷點。

+0

謝謝;這幾乎證實了我的原始想法 - 我想確保,因爲我沒有玩過那麼多,我的推理不是有缺陷的。 – 2012-02-28 14:00:13