当前位置: 首页 > 知识库问答 >
问题:

将密码存储在java代码中是否安全?[重复]

百里业
2023-03-14

我知道在java源代码中以字符串形式存储密码是不安全的。通常,最好将其存储在具有char[]类型的变量中。以以下形式存储密码安全吗?

char[] password = "my password".toCharArray();

字符串“my password”是否出现在编译的java类文件中?在我看来,在编译源代码之后,“我的密码”不会出现在我的类文件中。但我仍然不能100%确定我可以使用描述的表示来存储密码。

我能否安全地使用这个结构,并确保密码受到保护,除非有人从源代码中获取密码?

编辑:如果我存储密钥而不是密码在描述的格式:"key". toCharArray()?它是否减少了我的密码被黑客攻击的机会?

共有3个答案

温嘉赐
2023-03-14

正如其他人所提到的,在代码中存储密码通常是一个非常糟糕的主意,尽管单向散列函数可能会为您提供可接受的安全级别。

要演示您提出的技术不安全的原因,请尝试编译以下文件:

// Password.java
public class Password {
  private String strPass = "i<3bieber";
  private char[] chrPass = "belieber".toCharArray();
}

在命令行上:

$ javac Password.java
$ strings Password.class

您将看到字符串出现在编译代码中,并且易于访问。

越姚石
2023-03-14

字符数组出现在已编译二进制代码的数据部分,与字符串一样。他们必须——否则JVM怎么知道数组中有什么?所以,这实际上只是“默默无闻的安全”,这是永远不应该做的(而且对任何事情都没有帮助)。

更重要的是,您的操作方式(首先创建字符串并将其转换为数组)甚至不会让事情变得模糊——字符串仍然是首先创建的,因此是二进制文件数据部分的一部分。

壤驷康裕
2023-03-14

在source period中没有安全的方法存储密码。

代码可以读取的任何信息,熟练的攻击者也可以读取。

 类似资料:
  • 问题内容: 我让人们在氏族中提交用户名和密码,然后我需要知道使用此代码将其提交到数据库中是否安全,或者在数据库中是否安全。 我使用参数来避免SQL注入攻击。 -------------------------------------------------- -------------------------------- 这不是重复的,因为以不同的方式询问和存储密码。它使用MD5哈希密码。 问题

  • 我对源代码中的密码有一个问题。例如,如果你想连接到FTP服务器,你必须在源代码中以纯文本形式写入密码。这安全吗?或者可以反编译JAR文件或Android APK文件,以获取纯文本格式的数据吗?有没有安全的方法来存储数据?

  • 在回答这个问题之前,我必须说,我知道在客户端应用程序中硬编码密码是一种不好的做法,原因有很多。关于这个问题还有其他问题。这个问题的范围更窄,假设身份验证凭据必须驻留在客户端应用程序的代码上,原因是您无法控制的。 如果某些方法优于其他方法(例如:JPasswordField将密码存储在字符数组而不是字符串中),并且如果必须在Java应用程序中对其进行硬编码,您可以采取哪些措施使其更难获取? 更新:

  • 问题内容: 在Java桌面应用程序中存储密码的推荐方式是什么? 我希望用户只能输入一次凭证,而不会再次提示。 在个人项目中,我一直在使用Preferences API,但我假设这与以纯文本格式存储(安全方面)没有什么不同。 非常感谢 编辑: 非常感谢您的建议。毫无疑问,这似乎有些混乱,因为我可能还没有把问题弄清楚。 我将给出一个假设的情况: 假设我正在为远程数据库创建一个简单的前端,该前端使用用户

  • 问题内容: 昨天我参加了一家知名欧洲公司的CTO的演讲,他直到最近才告诉他他不知道Java有指针。在面对他时,他说他对Java中存在指针/不安全代码绝对有把握。 问题答案: 有一个叫做的类,这是真的。但是它没有在Java代码中使用指针(因为Java没有指针,尽管我同意Java引用在概念上是相似的),所以大多数都是使用本机代码实现的。 正如我在评论中提到的那样,这不是公共API的一部分,不应由客户端

  • 在一个应用程序中,我使用Android密钥库。我已经为整个密钥库和每个密码条目设置了密码。因为这些密码是字符串,所以它们存储在代码的字符串成员中。 显然,如果我想发布应用程序,这是不安全的,因为潜在的攻击者可以反编译apk并获取密码,因为它是硬编码在应用程序中的。 我的问题是: 在上面的场景中:攻击者是否能够读取我的密钥库文件,或者(在无根手机上)该文件是否只能由我的应用程序访问,因此仅密码是不够