一种Java类加密、解密方法及计算机可读存储介质技术

技术编号:26791510 阅读:12 留言:0更新日期:2020-12-22 17:06
本申请涉及一种Java类加密、解密方法及计算机可读存储介质,其中该Java类加密方法,使用密钥对第一字节码类文件进行加密,得到第一字节码类文件密文,生成与第一字节码文件同名的第二字节码类文件,将第一字节码类文件密文写入第二字节码类文件,并且第二字节码类文件具有与第一字节码类文件相同的扫描特征,以使字节码工具将第二字节码类文件当作所述第一字节码文件来扫描。该解密方法,在类加载器的加载过程中,拦截该加载过程,并启动解密过程,从第二字节码文件中获取第一字节码类文件密文,并使用密钥解密得到第一字节码类文件。通过本申请,实现了对Java应用和Java框架均完全透明的加解密过程。

【技术实现步骤摘要】
一种Java类加密、解密方法及计算机可读存储介质
本申请涉及计算机程序源代码加密及解密领域,尤其涉及一种Java类加密、解密方法及计算机可读存储介质。
技术介绍
代码混淆(Obfuscatedcode)亦称花指令,是将计算机程序的代码,转换成一种功能上等价,但是难于阅读和理解的形式的行为。代码混淆可以用于程序源代码,也可以用于程序编译而成的中间代码。执行代码混淆的程序被称作代码混淆器。相关技术中,已经存在许多种功能各异的代码混淆器。代码混淆只是设置人类阅读和理解的难度,仍然可以通过反编译工具反编译成可供人类阅读的源代码,而且很多应用使用Spring框架或其它依赖注入(DependencyInjection,简称为DI)IOC(InversionofControl,控制反转)框架,由于框架的需要,不能任意对函数的类名、方法名、注解、变量进行修改,因此,代码混淆无法实现真正有效的加密。字节码加密则是通过加密算法,直接将字节码Class文件加密后存储并运行,加密后的字节码文件无法被Java虚拟机(JVM)直接识别并运行,必须通过定制类加载器(Classloader)或结合Java虚拟机工具接口(JavaVirtualMachineToolInterface,简称为JVMTI)技术,使得Classloader在类加载阶段将字节码文件动态解密后才能正常运行。相关技术中,一种常用的Java字节码类文件加密解密的方法是通过非对称加密的方式将Class加密,并结合JVMTI机制拦截JVM类加载的过程,实现在类加载的过程中动态解密。这种加解密的方式大致需要以下几个步骤或要素:1)加密算法(使用公开或私有的加密算法即可,但通常使用非对称加密,如RSA);2)提前生成一对密钥(公钥和私钥),公钥用于加密,私钥用于解密;3)使用加密算法和公钥提前将需要加密的Java应用的所有Java类文件提前加密,并将原类文件删除;4)私钥随加密后的应用部署;5)运行时使用加入下面的参数以启动JVMTI解密:agentpath:/path/to/decrypt.so,加入该参数后即可完成拦截Classloader的类加载方法并实现内存中动态解密(解密过程中需要用到私钥)。该方案实现的加密解密过程是比较安全的,但该方案导致很多流行的Java框架(如SpringFramework、Hibernate、ApacheTomcat)在启动阶段无法扫描这些加密的Class,从而导致Java应用无法正常启动。
技术实现思路
为了解决上述技术问题或者至少部分地解决上述技术问题,本申请提供了一种Java类加密、解密方法及计算机可读存储介质。第一方面,本申请提供了一种Java类加密方法,包括:生成密钥;使用上述密钥对第一字节码类文件进行加密,得到第一字节码类文件密文;生成与上述第一字节码类文件同名的第二字节码类文件,其中,上述第二字节码类文件具有与上述第一字节码类文件相同的扫描特征,以使字节码工具将上述第二字节码类文件当作上述第一字节码文件来扫描;将上述第一字节码类文件密文以字符串类型常量写入上述第二字节码类文件;使用上述第二字节码类文件替换上述第一字节码类文件。在某些实施例中,将上述第一字节码类文件密文以字符串类型常量写入上述第二字节码类文件,包括:在上述第二字节码类文件中设置一个或多个私有字符串类型常量字段;对上述第一字节码类文件密文进行编码,得到第一字节码类文件密文编码;将上述第一字节码类文件密文编码写入上述一个或多个私有字符串类型常量字段。在某些实施例中,将上述第一字节码类文件密文以字符串类型常量写入上述第二字节码类文件,包括:将上述第一字节码类文件密文以字符串类型常量写入上述第二字节码类文件的常量池中。在某些实施例中,上述第二字节码类文件的方法签名、注解及类属性与上述第一字节码类文件相同。第二方面,本申请提供了一种Java类解密方法,包括:通过字节码工具对第二字节码类文件预扫描启动,其中,上述第二字节码类文件与第一字节码类文件同名,并具有与上述第一字节码类文件相同的扫描特征,以使上述字节码工具将上述第二字节码类文件当作上述第一字节码文件来扫描;通过类加载器加载上述第二字节码类文件;在类加载器加载上述第二字节码类文件的过程中,拦截上述类加载器的加载过程,并根据Java程序运行时启动参数中的代理路径,启动解密过程;在上述解密过程中,从上述第二字节码类文件中获取上述第一字节码类文件的第一字节码类文件密文,其中,上述第一字节码类文件的第一字节码类文件密文被以字符串类型常量写入上述第二字节码类文件中;使用密钥对上述第一字节码类文件密文进行解密,得到上述第一字节码类文件;将上述第一字节码类文件提供给上述类加载器,以使上述类加载器加载上述第一字节码类文件。在某些实施例中,在上述解密过程中,从上述第二字节码类文件中获取上述第一字节码类文件的第一字节码类文件密文,包括:在上述解密过程中,从上述第二字节码类文件的常量池中获取上述第一字节码类文件的第一字节码类文件密文。在某些实施例中,在上述解密过程中,拦截上述类加载器的加载过程,包括:通过JVMTI机制拦截上述类加载器的加载过程。在某些实施例中,上述第二字节码类文件的方法签名、注解及类属性与上述第一字节码类文件相同。第三方面,本申请提供了一种计算机可读存储介质,上述计算机可读存储介质上存储有Java类加密程序,上述Java类加密程序被处理器执行时实现Java类加密方法的步骤。第四方面,本申请提供了一种计算机可读存储介质,上述计算机可读存储介质上存储有Java类解密程序,上述Java类解密程序被处理器执行时实现Java类解密方法的步骤。本申请实施例提供的上述技术方案与现有技术相比具有如下优点:本申请实施例提供的该技术方案,实现了对Java应用和Java框架均完全透明的加解密过程。附图说明此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本申请的实施例,并与说明书一起用于解释本申请的原理。为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。图1为本申请实施例提供的Java类加密方法一种实施方式的流程图;图2为本申请实施例提供的Java类解密方法一种实施方式的流程图;图3为本申请实施例提供的使用RSA非对称加密算法的Java类加密方法的流程图;图4为本申请实施例提供的使用RSA非对称加密算法的Java类解密方法的流程图;图5为本申请实施例的Java类加密装置一种实施方式的结构框图;图6为本申请实施例的Java类解密装置一种实施方式的结构框图;以及图7为本申请实施例的计算机设备一种实施方式的硬件结构示意图。具体实施方式应当理解,此处所描述的具体本文档来自技高网
...

【技术保护点】
1.一种Java类加密方法,其特征在于,包括:/n生成密钥;/n使用所述密钥对第一字节码类文件进行加密,得到第一字节码类文件密文;/n生成与所述第一字节码类文件同名的第二字节码类文件,其中,所述第二字节码类文件具有与所述第一字节码类文件相同的扫描特征,以使字节码工具将所述第二字节码类文件当作所述第一字节码文件来扫描;/n将所述第一字节码类文件密文以字符串类型常量写入所述第二字节码类文件;/n使用所述第二字节码类文件替换所述第一字节码类文件。/n

【技术特征摘要】
1.一种Java类加密方法,其特征在于,包括:
生成密钥;
使用所述密钥对第一字节码类文件进行加密,得到第一字节码类文件密文;
生成与所述第一字节码类文件同名的第二字节码类文件,其中,所述第二字节码类文件具有与所述第一字节码类文件相同的扫描特征,以使字节码工具将所述第二字节码类文件当作所述第一字节码文件来扫描;
将所述第一字节码类文件密文以字符串类型常量写入所述第二字节码类文件;
使用所述第二字节码类文件替换所述第一字节码类文件。


2.根据权利要求1所述的Java类加密方法,其特征在于,将所述第一字节码类文件密文以字符串类型常量写入所述第二字节码类文件,包括:
在所述第二字节码类文件中设置一个或多个私有字符串类型常量字段;
对所述第一字节码类文件密文进行编码,得到第一字节码类文件密文编码;
将所述第一字节码类文件密文编码写入所述一个或多个私有字符串类型常量字段。


3.根据权利要求1或2所述的Java类加密方法,其特征在于,将所述第一字节码类文件密文以字符串类型常量写入所述第二字节码类文件,包括:将所述第一字节码类文件密文以字符串类型常量写入所述第二字节码类文件的常量池中。


4.根据权利要求1所述的Java类加密方法,其特征在于,所述第二字节码类文件的方法签名、注解及类属性与所述第一字节码类文件相同。


5.一种Java类解密方法,其特征在于,包括:
通过字节码工具对第二字节码类文件预扫描启动,其中,所述第二字节码类文件与第一字节码类文件同名,并具有与所述第一字节码类文件相同的扫描特征,以使所述字节码工具将所述第二字节码类文件当作所述第一字节码文件来扫描;
通过类加载器加载所述第二...

【专利技术属性】
技术研发人员:廖雄杰冯立强
申请(专利权)人:北京基调网络股份有限公司
类型:发明
国别省市:北京;11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1