java springBoot项目代码加密总结

本文介绍了在Java SpringBoot项目中实现代码加密的过程,重点讨论了ClassLoader原理、字节码文件存储格式、加密文件解密、接口编程的重要性以及类转换异常的处理。通过将字节码加密并使用JNI技术调用C语言解密,提升了反编译难度。虽然存在硬件相关性问题,但整体方案为Java代码加密提供了有效思路。
摘要由CSDN通过智能技术生成

         项目需要向外出售,涉及到版权问题需要进行代码加密。两周时间最终实现了对核心的一个package内的代码进行加密。还未实现对带有spring注解的类进行加密,但是以现在的技术积淀应该没有什么大的问题就可以将加密移植到springBoot源码之中,这个如果有的话后期再更新吧。

        java加密很难,是因为源码编译后的字节码保留的源码信息是在太多导致了很容易被反编译。但是如果不是这样的话java也实现不了跨平台。所以加密的核心或者本质就是避免在程序装载到虚拟机之前保持字节码的不可见。加密思路当然就是将字节码使用AES等算法加密之后,解密并装载类的部分放到运行的虚拟机之中动态执行。并且解密这一部分用C/C++进行编写,在java中使用JNI技术调用。这样就成功将java的反编译难度提升到了反编译C的难度了。

     知识一:ClassLoader的原理,这个自行查资料学习,但是需要注意的是。如果要加密的类比较复杂,比如一个类A中含有普通内部类、抽象内部类、讲台内部类、匿名内部类、内部接口。这就是加载难点所在。java编译之后的类A其实会生成多个.class文件,如果要使用自己的ClassLoader进行加载的话,必须控制好加载顺序。

      ClassLoader的字节码加载顺序如下:

            1、接口(普通接口或者内部接口)以及抽象类(普通抽象类或者内部抽象类)

            2、静态内部类 

            3、其他类(普通类,匿名内部类,普通内部类,枚举)

具体如何实现自己想办法吧,我是写了段代码去使用正则表达式,通过遍历对比源码和字节码文件名进行了字节码文件的筛选,并排好顺序。

     知识二࿱

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值