2010-11-23 42 views
1

前段时间,在我的工作中,我需要保护一些类别以防其他人阅读代码。为此,我创建了一个EncryptedClassLoader,它加载了以前加密的类,并且可以加载正常(未加密)的类。 以这种方式工作有点复杂,测试也是如此(编译,然后加密,然后解密)。如何保护/加密你的Java类?

是否有任何自由的框架来做我需要的,并且容易处理?我的意思是,不仅混淆,而且加密文件,所以没有人可以读取或调试那部分代码。我也可以很容易地更改加密密钥(在我的应用程序中,它是硬编码的)。

在此先感谢。

+7

对于每一个能有一个开罐器。如果该类可以在JVM中执行,则其内容可以通过某种方式获得。考虑一个被破解的OpenJDK,它可以转储加载的类的内容,例如,作为一个简单的例子。 – 2010-11-23 14:35:45

+0

如果您的代码非常好以至于需要加密,那么您只需版权算法imho :) – 2010-11-23 14:39:01

回答

7

简短的回答,你不能。加密不起作用。下面是关于为什么它是一个pointless to use an encrypted class loader文章老气:

不幸的是,你就错了, 都在想,你是 最先想出这个主意,并在 认为它的实际工作。和 的原因与你的加密方案的强度无关。

您可以对其进行混淆处理,但这只会到目前为止,并且最终我坚信您的时间可以更好地用于修复错误或添加功能。

3

加密不会为混淆添加太多安全性。任何能够运行程序的人都可以将解码后的字节码转储到磁盘上。我假设这就是为什么加密字节码不是很常见的情况,例如对它进行签名。

如果你确实想加密你的字节码,请确保你也混淆了它,我认为你现在使用的方法在没有添加任何框架或库的情况下就可以正常工作。

1

我们使用JarProtector库来加密我们的jar文件。没有混淆,但只有加密。没有选择更改加密密钥,但defineClass()永远不会被调用。

0

你可以尝试VLINX Java Protector,这使得通过修改JVM的本地类加载器来加密和解密类的数据,而不是用Java编写的类加载器,可以有效保护您的Java代码