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

Can runnable jar files be interpreted back into java source code

本问题已经有最佳答案,请猛点这里访问。

当我从Eclipse的Java源代码文件中创建一个Runnabl JAR文件时,我相信它创建了一个可以由JVM运行的类文件。

我之所以这样问是因为我要制作一个Java应用程序来保存我所有的密码。该应用程序将由一个请求密码的界面组成,如果密码正确,则显示密码。以下是我关于这个主题的问题:

  • 可运行的*jar文件*究竟包含什么?
  • 如果可运行的JAR文件由一个类文件组成,那么该类文件是否可以被解释为能够看到修改密码的源代码?
  • 当您从CMD运行Runnabl JAR文件并键入"Java-JAR XXX"时。"XXX"意思是文件名,"-jar"意味着你要运行JAR文件,而"Java"意味着在JVM中运行下面的文件?
  • 这类似于.exe文件,当转换为.exe文件时,无法取消对可读源代码的操作。


对于未分配的问题:如果您的密码在源代码中,那么很容易找到它在类文件中的位置。

可运行的JAR文件是包含类文件的JAR文件(即带有JAR后缀的zip文件),以及包含有关启动哪个类的信息的特殊文件。

您可以解压缩字节代码:http://www.program-transformation.org/transform/javadecompilers以获取源代码。但实际上,您可以在字节代码中看到密码,而无需对其进行反编译。

对。在Java-JAR XXX Java中,使用名为XXX的JAR文件运行JVM

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

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


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

因此,不,密码在类文件中本质上是不安全的(因此不在JAR档案中,因为JAR可以很容易地被解包)。

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


基本上,无论你多么努力,任何人都可以很容易地对它进行反编译和读取。

如果可以,请不要存储密码,在服务器上联机比较(使用异步加密),或者使用每次提供给应用程序的主密码存储密码。

如果不能,不要按原样存储密码。我能想到的最好的事情是存储(和检查)密码的哈希代码。用户输入密码,然后输入sha-256'd,将得到的哈希代码与您存储的密码哈希代码进行比较。加盐以防彩虹桌。

其思想是散列函数只是单向的,密码无法从散列中恢复。因此,如果密码足够强大,任何人都不应该在合理的时间内获得密码。

关于这个的一个非常好的阅读是wiki链接——但最显著的是jasipt.org上的这篇文章。

也就是说,如果您试图对包含哈希的文件进行加密以添加另一层安全性,那么仍然可以使用反编译器和调试器来找到解密的密码,因此不要指望它对真正想要通过的人是非常有效的。因此,与其说它是真正的加密,不如说它是通过模糊来实现安全性的。