admin管理员组

文章数量:1575503

应用场景:

随着Java越来越强大所以应用场景越来越丰富,应用的领域也越来越多,如果你遇到这种情况,项目要求自己公司开发,开发完成时要运行在其他公司(购买项目的公司)的服务器上,虽然我们将项目卖给他们,但是并不希望他们能看到源码,毕竟后期维护也是可以收取很高费用的嘛,也许项目中其他核心资源在里面不希望他人看到,所以要求项目加密,本文只提供大概思路,具体详细使用可以评论或者给我发送邮件:19807907497@163

  • 封装dll/so动态库:由于dll或者so文件无法反编译,所以被封装为dll/so文件的函数相对安全,重要代码使用c/c++实现,然后封装为DLL文件(Windows系统上使用的动态库)和SO文件(Linux系统上使用的动态库),在Java中使用JNA/JNI(jna为java的框架,专门用于Java语言调用其他语言的函数使用十分简单。jni为各个语言之间调用的实现,通用性十分强,但是使用比较困难,容易出错)调用。具体实现可以查看个人的csdn:ljava调用dll文件,java用jna调用dll,visual studio 工具封装c++ 函数为dll动态库(史上最详细,续更

  • 代码混淆:我使用的是项目打成jar包时实现代码混淆,使用proguard来实现的。github的地址:proguard-maven-plugin。主要是在将java项目打成jar包时混淆类名,方法名,变量名。或许你会认为这十分小伎俩,但是你可以尝试看下被混淆后的代码,都是使用abcd代替,看起来十分恶心,如果我能连这样的代码都看得懂,那我为什么不自己写一个项目呢?只需在pom文件中加入插件,然后配置混淆的类和方法,混淆后很容易报错,所以还是相对麻烦的,在pom文件中配置

  • 使用NG的防盗链实现静态资源的防盗:主要就是通过在ng中配置密匙和生成发送请求的时间戳以及过期时间来达到防盗的效果。服务端只存入文件的存取路径发送 给客户端,当用户真的需要播放或者查看资源的时候,在通过服务器接口请求生成ts和token的真正可以获取资源的路径,ng中配置了过期时间(过期时间越短越好),生成的url并不是一直有效。由于生成获取资源路径的接口十分重要所以最好不要用Java实现,使用so动态库来实现较好,结合post请求和request中的referer参数来判断请求源是否从网站内来的

  • 配置文件加密:代码加密只是一方面,毕竟项目部署在别人的服务器上,所以还需要考虑配置文件被他人查看的问题,例如MySQL数据库,文件数据库密码等等。可以使用github上开源项目jasypt-spring-boot-starter,添加maven坐标之后进行一些配置就可以实现,这个在网上的资源相对不是特别稀缺,实现也比较简单,可以直接将重要参数放在代码中调用方法进行加密,也可以使用在运行jar文件时添加密码启动。具体可以参考一下众网友的资源:(五)配置文件的属性加密。

  • 服务器上下发指定权限:实现思路就是将应用的所有功能例如 MQ,MySQL,FFmpeg等等相关的都安装在同一个文件夹下,在部署项目的时候对这个文件夹授予特殊权限,使得文件夹只能root或者指定用户能够查看,这样就保证了数据库的安全性。这种情况可能存在项目启动后访问失败的权限问题,这个思路我还没有实践,只是想法。


总结:如果仅仅是想实现代码的加密,那么前四种完全可以达到,而且安全级别可以说算是还可以。要求破解懂各种语言,并且需要花时间去了解相关东西的原理。前三种我已经在项目中实现了,切实可行,有问题可以直接问我。第四种主要用于网络传输层,说实话,意义不大,但是总了总比不做好吧。至于最后一种还没有整合进去,或许会有很多问题,也许做不到,但也作为一种思路写下来,毕竟花了很多时间去想。最后一种主要是实现数据库的加密,这是一件难的事情

本文标签: 项目Java