我们正在向客户分发一些 Java jar 文件,这些文件是我们业务的关键 Assets 。我们可以进行混淆以使其更难进行尊重工程,但我们也不希望 jar 文件在我们的应用程序之外使用。有什么好的解决办法吗?
我们正在考虑一种解决方案,即在运行时从我们的应用程序传递访问 token (有效期很短)及其签名,并在每次调用公共(public)接口(interface)时验证 jar 中的 token 。 token 和签名是从 Web 服务器生成的,并由私钥加密,而 jars 使用硬编码的公钥来验证签名。这行得通吗?
最佳答案
无论您向二进制文件添加多少混淆,始终可以对其进行逆向工程。只是需要更多的工作。
根据您提出的解决方案,我发现了主要问题: - 如果分发代币的网络服务出现故障,合法用户将受到惩罚 - 非法用户很容易修补java类以跳过 token 验证。因此拥有比合法用户更好的服务。
你遇到的主要问题是你的附加值在 jar 里。如果您发布它,任何人都可以使用它。
现在在网络上广泛使用的一种解决方案是将算法保留在本地并提出在线网络服务。客户端提交请求,您所在场所的服务器计算答案并将其提供给客户端。
但这是一种非常不同的业务模式,需要高度可用的基础设施。主要云提供商可以为此提供帮助。
关于java - 如何保护jar不被别人使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40258138/