java String编译

时间:2013-01-16 22:38:43

标签: java string compilation

我正在编写一个使用 FTP 加载文件的应用程序。代码如下所示:

String username = "username";
String password = "password";

但是在编译之后我可以在.class文件中看到它们。 编译代码如下所示:

\00username\00password

所以问题是我可以在编译的代码中看到密码和登录。我认为那不好。如何在字节码中创建java编译字符串?

4 个答案:

答案 0 :(得分:5)

没有将字符串文字编译为“字节码”的事情。有一个String的字节表示,但是,正如您所注意到的,大多数文本查看器会将此字节表示转换为其正常的ascii / unicode表示。无论哪种方式,存储甚至混淆的用户名/密码都存在安全隐患,并且永远不会完成。

为了安全地存储用户名/密码,您应该从外部安全文件访问它,而不是将其硬编码到程序中。

答案 1 :(得分:2)

Dicarlo2说:

  

为了安全地存储用户名/密码,您应该访问   它来自外部安全文件,而不是硬编码到程序中。

这仍然比在Java代码中对其进行硬编码更好,但您可能需要知道字符串是在字符串池中实现的,这也可能是一个安全问题。

这就是Console.readPassword返回char数组而不是String的原因。 http://docs.oracle.com/javase/tutorial/essential/io/cl.html

  

其次,readPassword返回一个字符数组,而不是String,所以   密码可以被覆盖,一旦将其从内存中删除   不再需要了。

但在实际应用中,密码通常用作字符串

答案 2 :(得分:1)

您需要将密码存储为加密值。每次访问受密码保护的实例都将使用加密密码,以及解密算法和密钥。然后,您将不会在编译的文件中拥有密码。这很糟糕。

答案 3 :(得分:0)

除非密码是加密的,否则不要对密码进行硬编码。

如果要在命令行上提示用户输入密码,可以使用在SO上发布的this method。对于Swing GUI,请使用JPasswordField

希望这会有所帮助!!