可运行的jar文件可以解释回java源代码吗

可运行的jar文件可以解释回java源代码吗,java,jar,jvm,exe,Java,Jar,Jvm,Exe,当我从eclipse的java源代码文件创建可运行jar文件时,我相信它创建了一个类文件,然后可以由JVM运行 我问这个问题的原因是因为我将要制作一个保存我所有密码的java应用程序。该应用程序将由一个要求输入密码的界面组成,如果密码正确,则显示密码。以下是我在这个问题上的问题: runnable*jar文件*具体由什么组成 如果可运行jar文件包含一个类文件,那么该类文件是否可以被解释为能够看到会辱骂密码的源代码 从cmd运行可运行jar文件时,键入“java-jar xxx”。“xxx”表

当我从eclipse的java源代码文件创建可运行jar文件时,我相信它创建了一个类文件,然后可以由JVM运行

我问这个问题的原因是因为我将要制作一个保存我所有密码的java应用程序。该应用程序将由一个要求输入密码的界面组成,如果密码正确,则显示密码。以下是我在这个问题上的问题:

  • runnable*jar文件*具体由什么组成
  • 如果可运行jar文件包含一个类文件,那么该类文件是否可以被解释为能够看到会辱骂密码的源代码
  • 从cmd运行可运行jar文件时,键入“java-jar xxx”“xxx”表示文件名,“-jar”是否表示要运行一个jar文件,“java”表示在JVM中运行以下文件
  • 这类似于.exe文件,当转换为.exe文件时,无法对可读的源代码进行反编译

Java类文件可以反汇编回可读的Java代码。不过,更简单的是,您可以从编译的类文件中提取所有密码,因为它们存储为纯文本(例如,在GNU机器上尝试使用
strings
命令)

因此,不,密码在类文件中不是天生安全的(因此也不是在jar归档中,因为jar很容易解包)


您需要做的是实现某种加密,并让您的程序将密码保存在加密文件中。然后,您的程序将需要您输入解密密钥,甚至可以解压缩密码。Java程序中不应该包含密钥,它应该在每次运行程序时由您提供。

对于未询问的问题:如果您的密码在源代码中,它将以一种非常容易找到的方式出现在类文件中

可运行的jar文件是一个jar文件(即带有jar后缀的zip文件),其中包含类文件和特殊文件,其中包含关于启动哪个类的信息

您可以反编译字节码:以获取源代码。但实际上,您可以在字节码中看到密码,而无需对其进行反编译

对。在java-JARxxx中,java意味着使用名为xxx的jar文件运行jvm

如果您知道创建的语言和工具,您应该能够像类文件一样反编译exe文件。即使没有密码,在源代码中也很容易在.exe文件中找到。是的,jar文件有点像exe文件,但它们与您描述的不同

如果要使应用程序维护您的密码,请使其使用您作为应用程序用户启动时提供的主密码对存储的密码进行加密。永远不要在源代码中存储密码。

基本上,不管你怎么努力,它都可以被任何人轻松地反编译和读取。 如果可以,请不要存储密码,在服务器上联机比较(使用)或使用每次提供给应用程序的主密码存储密码

如果不能,请不要按原样存储密码。我能想到的最好的事情是存储(并检查)密码的哈希代码。用户输入密码,然后输入密码,并将生成的哈希代码与存储的密码哈希代码进行比较。添加以防止

这样做的想法是,密码无法从其哈希中恢复。因此,如果你的密码足够强大的话,没有人能够在合理的时间内得到你的密码

一个非常好的阅读是维基链接-


这就是说,如果您试图加密包含哈希的文件以添加另一层安全性,那么仍然可以使用反编译器和调试器找到解密后的密码,因此不要指望它对真正想要通过的人来说是超级有效的。因此,它不仅仅是一种真正的加密。

相关:-简言之:确保没有人能找到你的密码,即使你手头有密码源。Jetty使用一种简单的方法对密码进行编码,这样密码就不便于人类阅读。您可能希望执行类似的操作。另请参阅,您不使用现成的密码管理器应用程序是否有特殊原因?有各种各样的商业和开源选项,这些选项是由了解安全性的人开发的,他们努力避免回答您问题的人注意到的各种问题。例如,Bruce Schneier创建了一个开源密码管理器,他是一位备受尊敬的密码学家和安全实践者