如何保护/加密Java类?

前段时间,在我的工作中,我需要保护一些课程,以防止其他人阅读代码。 为此,我创建了一个EncryptedClassLoader,它加载了以前加密的类,并且还可以加载普通(未加密)类。 以这种方式工作有点复杂,并且也进行测试(编译,然后加密,然后解密)。

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

提前致谢。

简短的回答,你不能。 加密不起作用。 这是一篇关于为什么使用加密类加载器毫无意义的旧文章:

不幸的是,你认为你是第一个提出这个想法并认为它确实有效的人,你就错了。 原因与加密方案的强度无关。

你可以对它进行模糊处理,但这只会到目前为止,最后我坚信你的时间会更好地修复bug或添加function。

加密不会增加混淆的安全性。 任何能够运行程序的人也可以将decypted字节码转储到磁盘上。 我假设这就是加密字节码的原因并不常见,例如签名就是这样。

如果你想加密你的字节码,请确保你也混淆它,我认为你当前使用的方法可以正常工作,而无需添加任何框架或库。

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

保护代码的唯一方法就是不允许用户运行它。 而不是分发应用程序,销售对在线服务的访问权限。 然后你的代码就坐在服务器上,你唯一暴露的就是界面。

另一种方法是用合同和律师保护你的代码,但除非你写的东西真的很好,否则这将花费你超过你原本会丢失的收入。

您可以尝试VLINX Java Protector ,它通过修改JVM来加密和解密类数据,而不是用Java编写的ClassLoader,可以有效地保护您的Java代码,从而生成本机ClassLoader。