2014-10-27 57 views
1

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

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

GMailSender m = new GMailSender("[email protected]", 
      "mypasswordhere"); 

,我知道写密码,这样是不是在所有的安全是我的密码很容易被窃取通过提取我的APK也
存储在strings.xml中的密码也是不安全的XML也可以检索。

我的问题是-
有没有其他的方法来在我的文件中写密码,以便它保持安全?

+5

而最简单的答案是否定的。将密码存储在设备上并不安全。 – 2014-10-27 12:36:49

+0

用足够的时间和精力攻击者将能够找到你的密码 – reactivemobile 2014-10-27 12:39:14

+0

加密你的密码 – 2014-10-27 12:40:12

回答

4

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

即使你加密像有人说你将不得不存储它的解密算法/密钥某处代码,这将很容易地逆向工程。

+0

有人是我的,但我的意思是它只比纯文本存储更好。因为加密的密码需要解密。它的存储只是纯文本。任何客户端登录(期望服务器)系统必须将密码存储在任何位置.i说在这种情况下最好加密.so攻击者需要更多的作品 – 2014-10-27 13:00:27

+1

你是对的。系统必须在任何地方存储密码。除了它们不以纯文本存储。他们存储一个盐渍的散列。然后他们比较两者。此外,OP要求“保持安全”,答案仍然是**否** – 2014-10-27 13:02:18

2

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

由于字符串是不可变Java中,如果您存储密码以纯文本它会在内存可用,直到垃圾收集器清除它,因为字符串在字符串池用于重用性有相当高的机会,它会被保留在内存中持续很长时间,这构成安全威胁。由于任何有权访问内存转储的人都可以以明文形式找到密码,这也是您应始终使用加密密码而不是纯文本的另一个原因。由于字符串是不可变的,所以没有办法改变字符串的内容,因为任何改变都会产生新的字符串。因此,在字符数组中存储密码明显减轻了窃取密码的安全风险。

0

存储密码不被认为是安全的,如果完全可以避免,则不应该这样做。有几个考虑因素,如果你出于某种原因必须要考虑的话。

  1. 存储这些东西的最佳位置是私人SharedPreferences。除了应用程序或根源设备,这些内容不可读。不要存储在外部存储!
  2. 加密总是可以撤消的,但如果必须的话,那会比没有好,需要更多的工作来撤消。使用每个设备独有的密钥。
  3. 某种令牌,比如Oauth使用的令牌可能是一种解决方案。这也不完全安全,但它可能是。
  4. Google为其功能提供更安全的API。你真的应该考虑到这一点。
相关问题