我在一个项目中工作,我们需要加密.jar文件,以便没有人可以访问其中的.class文件...是否有任何Java编码可以帮助我加密.jar文件?
我在一个项目中工作,我们需要加密.jar文件,以便没有人可以访问其中的.class文件...是否有任何Java编码可以帮助我加密.jar文件?
即使您对JAR文件进行加密,它在JVM运行之前也必须被解密,因此您需要另一个包含解密和在JVM中加载类的JAR文件。
由于无法加密第二个JAR文件本身,恶意用户想要查看您的类文件只需查看第二个JAR文件中的类,然后解密您的超级秘密JAR文件并获得访问权。
也许您可以使用混淆器增强代码的安全性,但它最终只会保护(使反编译更困难而不是不可能)您的类文件免受反编译,而不能防止其被使用。
如果混淆不够用,可以考虑将JAR文件编译为Windows DLL或Unix/Linux SO,这将使其更难以反编译,但并不总是能够正确实现且通常很麻烦。 GCJ 能够某种程度上做到这一点,还有其他商业产品可以直接将 .class/.jar 编译为机器码。
但是,请注意无论您花费多少安全性来加强它,因为客户端计算机必须能够执行它,必须能够读取它,所以无论如何您的代码都将暴露,您只能使其更难。
如果您确实有一个非常秘密的算法,您不想透露它,可以考虑将其转换为 Web 服务,并将其托管在您的服务器上,这样您就不必将实际代码发送到客户端计算机,并且还可以通过检查对其的访问来更好地防止未经授权的应用程序副本。
不行。由于您的程序需要能够运行该代码,因此无论如何都是没有意义的。
但是,您可以混淆代码,使得反编译.class文件会产生更少可读的代码(例如无意义的变量/类名等)。
如果您不想提供jar文件内部的类文件访问权限,为什么要将jar文件提供给应用程序呢?这个问题在概念上似乎有些错误...
如果您需要一些自定义的类加载方式,请考虑使用自定义类加载器。
file(1)
是一件美妙的事情。 - Davis Herring