掌桥专利:专业的专利平台
掌桥专利
首页

代码加密解密方法和装置、存储介质

文献发布时间:2023-06-19 11:26:00


代码加密解密方法和装置、存储介质

技术领域

本公开涉及软件安全技术领域,尤其涉及代码加密解密方法和装置、存储介质。

背景技术

随着科技的发展和进步,各种由代码生成的应用软件得到广泛应用。应用软件的开发往往需要耗费巨大的资金成本和时间成本,当前,生成应用软件的源代码容易被盗用,严重损害了开发者的利益。目前针对代码的保护,常用的代码安全解决方案多为代码混淆,代码混淆主要解决的问题是:将程序代码转换成功能上等价,但难于阅读和理解;且,随着框架代码注解和反射等大量使用,经过混淆处理后的代码中类名、方法名、属性名等被替换成无意义符号,导致反射无法使用,而且对外提供的接口API都无法使用,因而,代码混淆只能混淆相当少部分的代码。

发明内容

本公开的主要目的在于提出一种代码加密解密方法和装置、存储介质,可以提高代码的安全性。

实现上述目的,本公开的第一方面提出了一种代码加密解密方法,包括:

对待保护的源代码进行编译,得到待加密文件;

通过对称加密算法对所述待加密文件进行加密,得到字节码文件;

通过JVM类加载器将所述字节码文件装载到内存;

通过所述JVM类加载器对所述内存中的字节码文件进行解密,得到字节码;

对所述字节码进行校验和转换,生成目标代码。

可选地,所述方法还包括:启动JVM类加载器,具体包括:

配置JVM启动参数;

根据所述JVM启动参数启动所述JVM类加载器。

可选地,所述方法还包括:

创建所述JVM类加载器。

可选地,所述通过对称加密算法对所述待加密文件进行加密,得到字节码,包括:

编写加密代码;

将所述加密代码编译为jar包;

通过调用所述jar包读取所有所述待加密文件;

通过所述对称加密算法对所述待加密文件进行加密,得到所述字节码。

可选地,所述字节码文件包括后缀.class的文件,还包括:对所述字节码文件进行过滤,具体包括:

对所述字节码文件中后缀.class的文件进行过滤;其中,将过滤后的后缀.class的文件作为解密的字节码文件。

可选地,所述待加密文件为二进制的class文件:

可选地,所述二进制的class文件为单个class文件或者jar文件。

为实现上述目的,本公开的第二方面提出了一种代码加密解密装置,包括:

编译模块,用于对待保护的源代码进行编译,得到待加密文件;

解密模块,用于通过对称加密算法对所述待加密文件进行加密,得到字节码文件;

装载模块,用于通过JVM类加载器将所述字节码文件装载到内存;

解密模块,用于通过所述JVM类加载器对所述内存中的字节码文件进行解密,得到字节码;

代码还原模块,用于对所述字节码进行校验和转换,生成目标代码。

为实现上述目的,本公开的第三方面提出了另一种代码加密解密装置,包括:

至少一个存储器;

至少一个处理器;

至少一个程序;

所述程序被存储在存储器中,处理器执行所述至少一个程序以实现本公开如上述第一方面所述的方法。

为实现上述目的,本公开的第四方面提出了一种存储介质,该存储介质是计算机可读存储介质,所述计算机可读存储介质存储有计算机可执行指令,所述计算机可执行指令用于使计算机执行:

如上述第一方面所述的方法。

本公开提出的代码加密解密方法和装置、存储介质,通过对称加密算法对编译得到的待加密文件进行加密,得到字节码文件;通过JVM类加载器将所述字节码文件装载到内存、并对内存中的字节码文件进行解密,得到字节码;然后对字节码进行校验和转换,生成目标代码,提高代码的安全性。

附图说明

图1是本公开实施例提供的代码加密解密方法的流程图。

图2是本公开另一实施例提供的代码加密解密方法的部分流程图。

图3是图1的步骤102的流程图。

图4是是本公开实施例提供的代码加密解密装置的硬件结构示意图。

具体实施方式

为了使本公开的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本公开进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本公开,并不用于限定本公开。

需要说明的是,虽然在装置示意图中进行了功能模块划分,在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于装置中的模块划分,或流程图中的顺序执行所示出或描述的步骤。说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。

除非另有定义,本文所使用的所有的技术和科学术语与属于本公开的技术领域的技术人员通常理解的含义相同。本文中所使用的术语只是为了描述本公开实施例的目的,不是旨在限制本公开。

首先,对本公开中涉及的若干名词进行解析:

JWM(Java Virtual Machine,Java虚拟机):JWM是一个以GPL许可证(GeneralPublic License)分发源码,简洁实用的X11窗口管理器;JWM支持壁纸设定、任务栏、状态栏、菜单编辑;JWM与SpaceFM等文件管理器搭配,即可组成一个现代化的桌面。

X窗口系统(X Window System,也常称为X11或X):是一种以位图方式显示的软件窗口系统;X窗口系统通过软件工具及架构协议来创建操作系统所用的图形用户界面,此后则逐渐扩展适用到各形各色的其他操作系统上。

对称加密算法:对称加密算法是应用较早的加密算法,在对称加密算法中,数据发信方将明文(原始数据)和加密密钥一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去。收信方收到密文后,若想解读原文,则需要使用加密用过的密钥及相同算法的逆算法对密文进行解密,才能使其恢复成可读明文。在对称加密算法中,使用的密钥只有一个,发收信双方都使用这个密钥对数据进行加密和解密。

J2EE(Java 2Platform Enterprise Edition,Java 2平台企业版):是一种企业级分布式应用程序开发规范,是一种标准。

J2EE应用服务器:包括一个Web容器和一个EJB容器。Tomcat是一个Web容器,而不是一个完整的J2EE应用服务器。

Java编译器将每一个类编译成一个单独的文件,可以简化反编译的工作。并且,Java的Class文件中保留了所有的方法名称、变量名称,通过这些名称来访问变量和方法,但是这些符号往往带有许多语义信息。目前有相关的Java反编译工具能够反编译出非常接近源代码的程序。因此,通过反编译器,黑客能够对这些程序进行更改,或者复用其中的程序。如何保护Java程序不被反编译,是非常重要的一个问题。

随着科技的发展和进步,各种由代码生成的应用软件得到广泛应用。应用软件的开发往往需要耗费巨大的资金成本和时间成本,当前,生成应用软件的源代码容易被盗用,严重损害了开发者的利益。目前针对代码的保护,常用的代码安全解决方案多为代码混淆,代码混淆主要解决的问题是:将程序代码转换成功能上等价,但难于阅读和理解;且,随着框架代码注解和反射等大量使用,经过混淆处理后的代码中类名、方法名、属性名等被替换成无意义符号,导致反射无法使用,而且对外提供的接口API都无法使用,因而,代码混淆只能混淆相当少部分的代码。

其中,针对Java源代码进行保护的方案一般有代码混淆和加密锁硬件保护。其中,加密锁硬件保护的方式在实际使用中需要在每台物理服务器上安装,耗时耗力、操作麻烦、不方便;而且部署在公有云的系统要使用加密锁也不现实。

基于此,本公开实施例提供一种代码加密解密方法的技术方案,可以适用于所有代码,并可以提高源代码的安全性。

本公开实施例提供代码加密解密方法和装置、读存储介质,具体通过如下实施例进行说明,首先描述本公开实施例中的代码加密解密方法。

本公开实施例提供的代码加密解密方法,可应用于终端中,也可应用于服务器端中,还可以是运行于容器机制内。在一些实施例中,终端可以是智能手机、平板电脑、笔记本电脑、台式计算机或者智能手表等;服务器端可以配置成独立的物理服务器,也可以配置成多个物理服务器构成的服务器集群或者分布式系统,还可以配置成提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN以及大数据和人工智能平台等基础云计算服务的云服务器;但并不局限于以上形式。

图1是本公开实施例提供的代码加密解密方法的一个可选的流程图,图1中的方法包括步骤101至步骤105。

步骤101、对待保护的源代码进行编译,得到待加密文件;

步骤102、通过对称加密算法对待加密文件进行加密,得到字节码文件;

步骤103、通过JVM类加载器将字节码文件装载到内存;

步骤104、通过JVM类加载器对内存中的字节码文件进行解密,得到字节码;

步骤105、对字节码进行校验和转换,生成目标代码。

在一些实施例,源代码为JAVA源代码,待加密文件为二进制的class文件;步骤101中,对JAVA源代码进行编译后,得到二进制的class文件,其中,该二进制的class文件可以是单个class文件,也可以是jar文件,本公开实施例不做限定。

字节码文件为待加密文件进行加密后的文件,通过对称加密算法对class文件或者jar文件进行加密,从而在class文件或者jar文件不小心被泄露给第三方时,第三方也无法通过反编译查看源代码,从而提高了源代码的安全性。

在一实施例,可以将待加密文件装载到内存后进行加密,从而实现了在内存中进行加密和解密操作,进一步提高源代码的安全性。

JVM每次装入文件时需要一个ClassLoader对象,ClassLoader对象负责把新类装入正在运行的JVM。通过JVM,将待装入类的字符串给ClassLoader,然后通过ClassLoader找到相应的类文件,装入原始数据,并转换成一个class对象。此外,在类文件被执行前可以修改。即在类文件装入时可以进行解密。因此,可以将JVM看成是即时解密工具。由于解密后的字节码文件永远不会保持到文件系统,所以第三方较难找到解密后的代码,从而提高了代码的安全性。

在一些实施例,将加密后的class或jar文件与其依赖的class、jar和资源一起部署。

请参阅图2,在一些实施例,代码加密解密方法,还包括:启动JVM类加载器,具体包括:

步骤201、配置JVM启动参数;

步骤202、根据JVM启动参数启动JVM类加载器。

具体地,可以根据实际需要配置合适的JVM启动参数,JVM启动参数用于启动JVM类加载器。

由于在步骤103中,可以通过JVM类加载器将字节码文件装载到内存,因此在执行步骤104的解密步骤时,加载到内存中的类均是解密后的class类,从而可以被识别和运行。并且,通过步骤201中配置合适的JVM启动参数,从而在步骤104加载类时将加密后的class或jar进行解密。此外,解密过程是在加载类时进行且在内存中进行解密,同时解密的结果也都存在内存中,因此,第三方无法获得解密后的内容,从而提高了安全性。

在一些实施例,代码加密解密方法,还包括:创建JVM类加载器。从而,可以通过配置JVM启动参数、并根据JVM启动参数启动JVM类加载器。

请参阅图3,在一些实施例,步骤102,包括:

步骤301、编写加密代码;

步骤302、将加密代码编译为jar包;

步骤303、通过调用jar包读取所有待加密文件;

步骤304、通过对称加密算法对待加密文件进行加密,得到字节码。

在一些实施例,字节码文件包括后缀.class的文件,还包括:对字节码文件进行过滤,具体包括:

对字节码文件中后缀.class的文件进行过滤;其中,将进行过滤后的字节码文件作为解密的字节码文件。从而,可以将不需要的文件进行过滤,提高文件的解密效率和准确率。

本公开实施例提供的代码加密解密方法,通过对称加密算法对编译得到的待加密文件进行加密,得到字节码文件;通过JVM类加载器将所述字节码文件装载到内存、并对内存中的字节码文件进行解密,得到字节码;然后对字节码进行校验和转换,生成目标代码;本公开实施例提供的技术方案,适用于所有代码,提高代码的安全性。本公开实施例提供的技术方案可以加密所有JAVA程序代码,并且可以进行可视化加密,然后配合合适的JVM启动参数,并通过JVM启动参数启动JVM类加载器。

相比于常用的混淆算法容易被反编译,本公开实施例提供的技术方案避免了被反编译、提高了安全性,第三方无法通过反编译查看源代码;且本公开实施例中的解密过程是在加载类时进行的,因此解密的结果也都存在内存中,也就是解密出的目标代码也存在内存中,第三方无法获得解密后的内容,进一步提高了安全性。此外,本公开实施例的加密过程,可以在开发环境下进行,也可以在开发完成后针对程序包进行,加密过程较灵活和弹性。

另外,本公开实施例是在容器机制内进行加密和解密,进一步提高了代码的安全性;且解密可以在容器启动时进行。

本公开实施例还提供一种代码加密解密装置,可以实现上述代码加密解密方法,该装置包括:

编译模块,用于对待保护的源代码进行编译,得到待加密文件;

解密模块,用于通过对称加密算法对待加密文件进行加密,得到字节码文件;

装载模块,用于通过JVM类加载器将字节码文件装载到内存;

解密模块,用于通过JVM类加载器对内存中的字节码文件进行解密,得到字节码;

代码还原模块,用于对字节码进行校验和转换,生成目标代码。

本公开实施例还提供了一种代码加密解密装置,包括:

至少一个存储器;

至少一个处理器;

至少一个程序;

所述程序被存储在存储器中,处理器执行所述至少一个程序以实现本公开实施例上述代码加密解密方法。该电子设备可以为包括手机、平板电脑、个人数字助理(PersonalDigital Assistant,简称PDA)、销售终端(Point of Sales,简称POS)、车载电脑等任意智能终端。

请参阅图4,图4示意了另一实施例的代码加密解密装置的硬件结构,代码加密解密装置包括:

处理器401,可以采用通用的CPU(CentralProcessingUnit,中央处理器)、微处理器、应用专用集成电路(ApplicationSpecificIntegratedCircuit,ASIC)、或者一个或多个集成电路等方式实现,用于执行相关程序,以实现本公开实施例所提供的技术方案;

存储器402,可以采用ROM(ReadOnlyMemory,只读存储器)、静态存储设备、动态存储设备或者RAM(RandomAccessMemory,随机存取存储器)等形式实现。存储器402可以存储操作系统和其他应用程序,在通过软件或者固件来实现本说明书实施例所提供的技术方案时,相关的程序代码保存在存储器402中,并由处理器401来调用执行本公开实施例的文件隐藏和恢复方法;

输入/输出接口403,用于实现信息输入及输出;

通信接口404,用于实现本设备与其他设备的通信交互,可以通过有线方式(例如USB、网线等)实现通信,也可以通过无线方式(例如移动网络、WIFI、蓝牙等)实现通信;和

总线405,在设备的各个组件(例如处理器401、存储器402、输入/输出接口403和通信接口404)之间传输信息;

其中处理器401、存储器402、输入/输出接口403和通信接口404通过总线405实现彼此之间在设备内部的通信连接。

本公开实施例还提供了一种存储介质,该存储介质是计算机可读存储介质,该计算机可读存储介质存储有计算机可执行指令,该计算机可执行指令用于使计算机执行上述代码加密解密方法。

本公开实施例提出的代码加密解密方法、代码加密解密装置、存储介质,通过对称加密算法对编译得到的待加密文件进行加密,得到字节码文件;通过JVM类加载器将所述字节码文件装载到内存、并对内存中的字节码文件进行解密,得到字节码;然后对字节码进行校验和转换,生成目标代码,适用于所有代码,提高代码的安全性。相比于常用的混淆算法容易被反编译,本公开实施例提供的技术方案避免了被反编译、提高了安全性,第三方无法通过反编译查看源代码;且本公开实施例中的解密过程是在加载类时进行的,因此解密的结果也都存在内存中,也就是解密出的目标代码也存在内存中,第三方无法获得解密后的内容,进一步提高了安全性;并且加密过程,可以在开发环境下进行,也可以在开发完成后针对程序包进行,加密过程较灵活和弹性。另外,本公开实施例是在容器机制内进行加密和解密,进一步提高了代码的安全性。

存储器作为一种非暂态计算机可读存储介质,可用于存储非暂态软件程序以及非暂态性计算机可执行程序。此外,存储器可以包括高速随机存取存储器,还可以包括非暂态存储器,例如至少一个磁盘存储器件、闪存器件、或其他非暂态固态存储器件。在一些实施方式中,存储器可选包括相对于处理器远程设置的存储器,这些远程存储器可以通过网络连接至该处理器。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。

本公开实施例描述的实施例是为了更加清楚的说明本公开实施例的技术方案,并不构成对于本公开实施例提供的技术方案的限定,本领域技术人员可知,随着技术的演变和新应用场景的出现,本公开实施例提供的技术方案对于类似的技术问题,同样适用。

以上所描述的装置实施例仅仅是示意性的,其中作为分离部件说明的单元可以是或者也可以不是物理上分开的,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。

本领域普通技术人员可以理解,上文中所公开方法中的全部或某些步骤、系统、设备中的功能模块/单元可以被实施为软件、固件、硬件及其适当的组合。

本公开的说明书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本公开的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。

应当理解,在本公开中,“至少一个(项)”是指一个或者多个,“多个”是指两个或两个以上。“和/或”,用于描述关联对象的关联关系,表示可以存在三种关系,例如,“A和/或B”可以表示:只存在A,只存在B以及同时存在A和B三种情况,其中A,B可以是单数或者复数。字符“/”一般表示前后关联对象是一种“或”的关系。“以下至少一项(个)”或其类似表达,是指这些项中的任意组合,包括单项(个)或复数项(个)的任意组合。例如,a,b或c中的至少一项(个),可以表示:a,b,c,“a和b”,“a和c”,“b和c”,或“a和b和c”,其中a,b,c可以是单个,也可以是多个。

在本公开所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本公开各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本公开的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括多指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本公开各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,简称ROM)、随机存取存储器(Random Access Memory,简称RAM)、磁碟或者光盘等各种可以存储程序的介质。

以上参照附图说明了本公开实施例的优选实施例,并非因此局限本公开实施例的权利范围。本领域技术人员不脱离本公开实施例的范围和实质内所作的任何修改、等同替换和改进,均应在本公开实施例的权利范围之内。

相关技术
  • 代码加密解密方法和装置、存储介质
  • 用于在音频代码的编码/解码处理之间转换代码的方法和装置以及使用该方法和装置的存储介质
技术分类

06120112923013