簡體   English   中英

在Java文件中使用密碼的安全方式

[英]Secure way to use password in java file

我正在開發一個Android應用程序,通過它我可以通過GMAIL API發送郵件。
要通過GMAIL API發送郵件,我必須給他們我的ID和密碼。

GMailSender m = new GMailSender("myemailhere@gmail.com",
            "mypasswordhere");

而且我知道這樣寫密碼根本不安全,因為通過提取我的apk以及
將密碼存儲在strings.xml中也不安全,因為也可以檢索xml。

我的問題是-
還有其他方法可以在我的文件中寫入密碼,以確保其安全嗎?

簡短的答案不是。 不應將密碼存儲在代碼或任何文件中的任何位置。

即使您像有人說的那樣對它進行加密,也必須將其解密算法/密鑰存儲在代碼中的某個位置,這很容易進行逆向工程。

否,將密碼存儲在設備上並不安全。
一個小建議是始終以加密形式在char []中存儲密碼,而不是在必須存儲時將其存儲在String中。

由於字符串在Java中是不變的,如果您將密碼存儲為純文本格式,它將在內存中可用,直到垃圾回收器將其清除為止,並且由於字符串在字符串池中用於可重用性,因此很有可能將其長時間保留在內存中持續時間,從而構成安全威脅。 由於任何有權訪問內存轉儲的人都可以用明文形式找到密碼,這是另一個原因,您應該始終使用加密密碼而不是純文本密碼。 由於字符串是不可變的,因此無法更改字符串的內容,因為任何更改都會產生新的字符串。 因此,將密碼存儲在字符數組中可以明顯減輕竊取密碼的安全風險。

存儲密碼被認為是不安全的,如果可以避免,則不應這樣做。 如果出於某些原因必須考慮一些注意事項。

  1. 存儲此類內容的最佳位置是私有的SharedPreferences。 除了應用程序或根目錄設備外,其他任何東西均無法讀取這些內容。 不要存儲在外部存儲中!!!
  2. 加密總是可以撤消的,但是如果必須這樣做,那總比沒有好,要撤消更多的工作。 使用每個設備唯一的密鑰。
  3. 某種令牌(例如Oauth使用的令牌)可能是一種解決方案。 這也不是完全安全的,但是可以。
  4. Google為其功能提供了更安全的API。 您確實應該注意這一點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM