在java文件中使用密码的安全方式

时间:2014-10-27 12:35:30

标签: java android security android-xml

我正在开发一个Android应用程序,通过它我通过GMAIL API发送邮件 要通过GMAIL API发送邮件,我必须向他们提供我的ID和密码。

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

我知道写这样的密码根本不安全,因为我的密码很容易通过解压缩我的apk而被盗,而且在strings.xml中存储密码也不安全,因为xml也可以检索。 / p>

我的问题是 -
有没有其他方法可以在我的文件中写入密码以保证其安全?

3 个答案:

答案 0 :(得分:4)

简短的回答不是。您不应将您的密码存储在代码或任何文件中的任何位置。

即使您加密它,就像有人说您必须在代码中的某处存储它的解密算法/密钥,这将很容易进行逆向工程。

答案 1 :(得分:2)

不,在设备上存储密码是不安全的 小建议总是以加密形式存储char []中的密码,而不是在必须存储时存储在String中。

由于字符串在Java中是不可变的,如果您将密码存储为纯文本,它将在内存中可用,直到垃圾收集器清除它,并且因为字符串池中使用字符串以便重新使用,所以它很可能会保留在记忆持续很长时间,这会造成安全威胁。由于任何有权访问内存转储的人都可以以明文形式找到密码,这是另一个原因,您应该始终使用加密密码而不是纯文本。由于字符串是不可变的,因此无法更改字符串的内容,因为任何更改都将产生新的字符串。因此,在字符数组中存储密码可以明显降低窃取密码的安全风险。

答案 2 :(得分:0)

存储密码不被认为是安全的,如果可以避免则不应该这样做。如果您出于某种原因需要考虑一些因素。

  1. 存储此类内容的最佳位置是私有SharedPreferences。除应用程序或root用户设备外,其他任何内容都无法读取这些内容。不要存放在外部存储器上!!!
  2. 加密总是可以撤消,但如果必须,那么它总比没有好,需要更多工作才能撤消。使用每个设备独有的密钥。
  3. 某种令牌,例如Oauth使用的令牌,可能是一种解决方案。这也不是完全安全的,但它可能是。
  4. Google为其功能提供了更安全的API。你真的应该注意那个。