代码加密、解密方法、装置、计算机设备和存储介质与流程

文档序号:15151609发布日期:2018-08-10 21:09阅读:238来源:国知局

本申请涉及加密技术领域,特别是涉及一种代码加密、解密方法、装置、计算机设备和存储介质。



背景技术:

随着信息技术的发展,应用越来越多,产生的代码也越来越多,目前很多应用的代码都是利用高层抽象语言例如java编写的代码,很容易被反汇编,从而被非法阅读或者篡改,代码安全性低。



技术实现要素:

基于此,有必要针对上述技术问题,提供一种代码加密、解密方法、装置、计算机设备和存储介质,能够结合目标代码字节的字节顺序以及包括多个加密密钥的加密密钥序列的密钥顺序对目标代码进行加密,而且是以字节为单位对代码进行加密,因此,代码被反编译的难度大,提高了代码安全性。

一种代码加密方法,所述方法包括:获取待进行加密的目标代码,获取对所述目标代码进行加密的加密密钥序列,所述加密密钥序列包括多个加密密钥;根据所述目标代码的字节顺序从所述目标代码中获取当前待加密字节,根据所述加密密钥序列的密钥顺序从所述加密密钥序列中获取当前加密密钥;根据所述当前加密密钥对所述当前待加密字节进行加密,得到对应的当前字节密文;返回所述根据所述目标代码的字节顺序从所述目标代码中获取当前待加密字节,根据所述加密密钥序列的密钥顺序从所述加密密钥序列中获取当前加密密钥的步骤,直至所述目标代码的待加密字节加密完毕;将得到的各个字节密文进行组合,得到所述目标代码对应的代码密文。

一种代码解密方法,所述方法包括:获取目标代码对应的代码密文,获取对所述目标代码进行解密的解密密钥序列,所述解密密钥序列包括多个解密密钥;根据所述代码密文的字节顺序从所述代码密文中获取当前待解密字节,根据所述解密密钥序列的密钥顺序从所述解密密钥序列中获取当前解密密钥;根据所述当前解密密钥对所述当前待解密字节进行解密,得到对应的当前字节明文;返回所述根据所述代码密文的字节顺序从所述代码密文中获取当前待解密字节,根据所述解密密钥序列的密钥顺序从所述解密密钥序列中获取当前解密密钥的步骤,直至所述代码密文的待解密字节解密完毕;将得到的各个字节明文进行组合,得到所述代码密文对应的目标代码。

一种代码加密装置,所述装置包括:代码及密钥获取模块,用于获取待进行加密的目标代码,获取对所述目标代码进行加密的加密密钥序列,所述加密密钥序列包括多个加密密钥;加密字节及密钥获取模块,用于根据所述目标代码的字节顺序从所述目标代码中获取当前待加密字节,根据所述加密密钥序列的密钥顺序从所述加密密钥序列中获取当前加密密钥;加密模块,用于根据所述当前加密密钥对所述当前待加密字节进行加密,得到对应的当前字节密文;第一返回模块,用于返回所述根据所述目标代码的字节顺序从所述目标代码中获取当前待加密字节,根据所述加密密钥序列的密钥顺序从所述加密密钥序列中获取当前加密密钥的步骤,直至所述目标代码的待加密字节加密完毕;密文组合模块,用于将得到的各个字节密文进行组合,得到所述目标代码对应的代码密文。

一种代码解密装置,所述装置包括:密文以及密钥获取模块,用于获取目标代码对应的代码密文,获取对所述目标代码进行解密的解密密钥序列,所述解密密钥序列包括多个解密密钥;解密字节以密钥获取模块,用于根据所述代码密文的字节顺序从所述代码密文中获取当前待解密字节,根据所述解密密钥序列的密钥顺序从所述解密密钥序列中获取当前解密密钥;解密模块,用于根据所述当前解密密钥对所述当前待解密字节进行解密,得到对应的当前字节明文;第二返回模块,用于返回所述根据所述代码密文的字节顺序从所述代码密文中获取当前待解密字节,根据所述解密密钥序列的密钥顺序从所述解密密钥序列中获取当前解密密钥的步骤,直至所述代码密文的待解密字节解密完毕;明文组合模块,用于将得到的各个字节明文进行组合,得到所述代码密文对应的目标代码。

一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述代码加密方法的步骤。

一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述代码解密方法的步骤。

一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述代码加密方法的步骤。

一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述代码解密方法的步骤。

上述代码加密方法,通过获取待进行加密的目标代码,获取对目标代码进行加密的加密密钥序列,加密密钥序列包括多个加密密钥,根据目标代码的字节顺序从目标代码中获取当前待加密字节,根据加密密钥序列的密钥顺序从加密密钥序列中获取当前加密密钥,根据当前加密密钥对当前待加密字节进行加密,得到对应的当前字节密文,返回根据目标代码的字节顺序从目标代码中获取当前待加密字节,根据加密密钥序列的密钥顺序从加密密钥序列中获取当前加密密钥的步骤,直至目标代码的待加密字节加密完毕,将得到的各个字节密文进行组合,得到目标代码对应的代码密文。由于能够结合目标代码字节的顺序以及包括多个加密密钥的加密密钥序列的密钥顺序对目标代码进行加密,而且是以字节为单位对代码进行加密,因此,代码被破解以及反编译的难度大,提高了代码安全性。

上述代码解密方法,获取目标代码对应的代码密文,获取对目标代码进行解密的解密密钥序列,解密密钥序列包括多个解密密钥;根据代码密文的字节顺序从代码密文中获取当前待解密字节,根据解密密钥序列的密钥顺序从解密密钥序列中获取当前解密密钥,根据当前解密密钥对当前待解密字节进行解密,得到对应的当前字节明文,返回根据代码密文的字节顺序从代码密文中获取当前待解密字节,根据解密密钥序列的密钥顺序从解密密钥序列中获取当前解密密钥的步骤,直至代码密文的待解密字节解密完毕,将得到的各个字节明文进行组合,得到代码密文对应的目标代码。由于能够结合代码密文的字节顺序以及包括多个解密密钥的解密密钥序列的密钥顺序对目标代码对应的密文进行解密,而且是以字节为单位对代码进行解密,因此,代码被解密的难度大,提高了代码安全性。

附图说明

图1为一个实施例中代码加密以及解密方法的应用场景图;

图2为一个实施例中代码加密方法的流程示意图;

图3为另一个实施例中代码加密方法的流程示意图;

图4为一个实施例中代码解密方法的流程示意图;

图5为一个实施例中代码解密方法的流程示意图;

图6为一个实施例中代码加密装置的结构框图;

图7为另一个实施例中代码加密装置的结构框图;

图8为一个实施例中代码解密装置的结构框图;

图9为另一个实施例中代码解密装置的结构框图;

图10为一个实施例中计算机设备的内部结构图;

图11为另一个实施例中计算机设备的内部结构图。

具体实施方式

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

本申请提供的代码加密方法,可以应用于如图1所示的应用环境中。其中,终端102通过网络与服务器104通过网络进行通信。终端102上安装有应用程序,可以利用插件化的技术将应用中的核心代码分离为一个独立的插件文件并存储在服务器104中,当应用程序在终端102运行时,若需要运行目标插件,终端102向服务器104发送插件获取请求,插件获取请求携带目标插件标识,服务器104接收插件获取请求,根据目标插件标识获取得到对应的目标插件,并采用本发明实施例提供的代码加密方法对目标插件进行加密,得到对应的代码密文,将代码密文发送到终端102中,终端102接收代码密文,执行本发明实施例提供的代码解密方法,得到目标插件并运行目标插件。其中,终端102可以但不限于是各种个人计算机、笔记本电脑、智能手机、平板电脑和便携式可穿戴设备,服务器104可以用独立的服务器或者是多个服务器组成的服务器集群来实现。

在一个实施例中,如图2所示,提供了一种代码加密方法,以该方法应用于图1中的服务器为例进行说明,包括以下步骤:

步骤s202,获取待进行加密的目标代码,获取对目标代码进行加密的加密密钥序列,加密密钥序列包括多个加密密钥。

具体地,目标代码是需要进行加密的代码,目标代码可以是响应于终端的代码获取请求获取得到的,服务器也可以对需要存储的代码进行加密后再存储。加密密钥序列的个数为多个,具体可以根据需要进行设置。例如加密密钥序列中的加密密钥可以为4个。加密密钥序列可以是随机生成的,也可以是预先设置的。例如,当获取得到目标代码后,可以生成4个随机数,将这4个随机数组成加密密钥序列。或者,可以将终端的公钥作为加密密钥序列。

步骤s204,根据目标代码的字节顺序从目标代码中获取当前待加密字节,根据加密密钥序列的密钥顺序从加密密钥序列中获取当前加密密钥。

具体地,当前待加密字节是指目标代码中当前需要进行加密的字节,当前加密密钥是指对当前待加密字节进行加密的密钥。目标代码包括多个字节,可以根据目标代码的字节顺序依次获取当前待加密字节,可以根据加密密钥序列的密钥顺序依次获取当前加密密钥,然后根据对应的当前加密密钥对获取的当前待加密字节进行加密。在一个实施例中,加密密钥序列的个数少于目标代码的字节个数,因此,当加密密钥序列中的加密密钥依次获取完毕后,可以从加密密钥序列的第一个加密密钥开始循环获取加密密钥,直至目标代码的字节被加密完毕。例如,假设当前密钥序列有两个,对于目标代码的第一个字节,对应的加密密钥为第一个加密密钥,对于目标代码的第二个字节,对应的加密密钥为第二个加密密钥。对于目标代码的第三个字节,对应的加密密钥为第一个加密密钥……如此循环,直至目标代码的待加密字节均获取完毕。

步骤s206,根据当前加密密钥对当前待加密字节进行加密,得到对应的当前字节密文。

具体地,加密算法可以根据实际进行设置,例如可以是与运算、或运算或者异或运算中的一种或多种,在此不做限制。由于一个字节可以包括8个比特位,因此,可以对前4个比特位进行与运算,对后4个比特位进行异或运算等。

在一个实施例中,根据当前加密密钥对当前待加密字节进行加密,得到对应的当前字节密文的步骤包括:对当前待加密字节进行切分,得到多个对应的待加密比特位数据块。根据当前加密密钥对各个待加密比特位数据块采用不同的加密算法进行加密,得到各个待加密比特位数据块对应的比特位密文。将各个比特位密文进行组合,得到对应的当前字节密文。

具体地,待加密比特位数据块的个数具体可以根据需要进行设置。例如可以为2个。不同的加密算法可以是指加密密钥不同或者加密运算的方法不同中的一种或两种。对每个比特位数据块需要采用不同的加密算法进行加密运算,得到每个待加密比特位数据块对应的比特位密文,然后将各个比特位密文进行组合,得到对应的当前字节密文。例如,将字节以16进制表示,假设当前待加密字节为0x55,当前加密密钥为0xca,将字节的前4个比特位作为高四位,将字节的后4个比特位为作为低四位。则可以将0x55分为高四位对应的待加密比特位数据块以及低四位对应的待加密比特位数据块。然后将当前待加密字节0x55的高四位异或当前密钥0xca的高四位得到对应的第一比特位密文,将当前待加密字节0x55的低四位异或当前密钥0xca的低四位得到对应的第二比特位密文,将第一比特位密文以及第二比特位密文进行组合后得到0x55对应的当前字节密文为0x9a。

在一个实施例中,还可以对待解密字节进行移位后再根据当前加密密钥进行加密。例如,对0x55的高四位进行移位后再与当前密钥0xca的高四位进行异或加密计算得到比特位密文。

在一个实施例中,在根据当前加密密钥进行加密前,还可以将当前加密密钥切分为多个对应的密钥比特位数据块,对各个密钥比特位数据块分别采用不同的变形方式进行变形得到变形后的密钥比特位数据块。例如,可以将前4个比特位作为高四位密钥数据块,将后4个比特位作为低四位密钥数据块。对于高四位密钥数据块,可以采用移位方式进行变形,而对于低四位密钥数据块,可以采用与预定数值进行与计算的方法进行变形。

步骤s208,返回根据目标代码的字节顺序从目标代码中获取当前待加密字节,根据加密密钥序列的密钥顺序从加密密钥序列中获取当前加密密钥的步骤,直至目标代码的待加密字节加密完毕。

具体地,若目标代码中的待加密字节还未加密完毕,则根据目标代码的字节顺序从目标代码中获取下一个待加密字节作为当前待加密字节,根据加密密钥序列的密钥顺序将下一个加密密钥作为当前加密密钥,重复步骤s202~208,直到目标代码的待加密字节加密完毕。例如,假设目标代码包括n个字节,加密密钥序列包括k个加密密钥,其中,n大于k,且n与k均为大于1的正整数。则开始加密时,获取目标代码的第一个字节作为当前待加密字节,获取加密密钥序列的第一个加密密钥作为当前加密密钥,根据第一个加密密钥对第一个字节进行加密,当第一个字节加密成功后,获取目标代码的第二个字节作为当前待加密字节,获取加密密钥序列的第二个加密密钥作为当前加密密钥,根据第二个加密密钥对第二个字节进行加密,当第二个字节加密成功后,继续根据字节顺序获取当前待加密字节,直至根据第a个密钥对第n个字节进行加密成功后停止。其中,当n除以k的余数为1~k-1之间的数值时,a等于n除以k的余数。当n除以k的余数为0时,a等于k。

步骤s210,将得到的各个字节密文进行组合,得到目标代码对应的代码密文。

具体地,当目标代码的待加密字节加密完毕后,将得到的各个字节密文进行组合,得到目标代码对应的代码密文。例如,若目标代码的第一个字节对应的字节密文为b1,第二个字节对应的字节密文为b2,第三个字节对应的字节密文为b3。则组合得到的代码密文为b1b2b3。

上述代码加密方法中,上述代码加密方法,通过获取待进行加密的目标代码,获取对目标代码进行加密的加密密钥序列,加密密钥序列包括多个加密密钥,根据目标代码的字节顺序从目标代码中获取当前待加密字节,根据加密密钥序列的密钥顺序从加密密钥序列中获取当前加密密钥,根据当前加密密钥对当前待加密字节进行加密,得到对应的当前字节密文,返回根据目标代码的字节顺序从目标代码中获取当前待加密字节,根据加密密钥序列的密钥顺序从加密密钥序列中获取当前加密密钥的步骤,直至目标代码的待加密字节加密完毕,将得到的各个字节密文进行组合,得到目标代码对应的代码密文。由于能够结合目标代码字节的顺序以及包括多个加密密钥的加密密钥序列的密钥顺序对目标代码进行加密,而且是以字节为单位对代码进行加密,因此,代码被破解以及反编译的难度大,提高了代码安全性。

在一个实施例中,如图3所示,代码加密方法还包括步骤s302:接收终端发送的目标代码获取请求,目标代码获取请求携带目标代码标识。步骤s202包括:根据目标代码标识获取待进行加密的目标代码。得到目标代码后,代码加密方法还可以包括步骤s304:将代码密文以及加密密钥序列进行组合,得到组合后的代码数据包,将代码数据包发送给终端。

具体地,目标代码可以是终端安装的应用程序对应的存储在服务器的插件所对应的代码。当终端在运行应用程序的过程中需要运行目标插件时,向服务器发送目标代码获取请求,服务器中设置了代码标识与代码的对应关系,当服务器接收到目标代码获取请求时,根据目标代码标识获取对应的目标代码。然后执行步骤时s204~s210,得到目标代码对应的代码密文。同时,为了能够让终端接收到代码密文后,能够对代码密文进行解密。因此,可以将加密密钥序列插入到代码密文中,得到代码数据包,并将代码数据包发送到终端中。组合的方式具体可以预先设置。在一个实施例中,加密密钥序列对应的插入位置可以是预先设置的,可以是固定的位置也可以是根据一定的计算方法计算得到的。例如,可以将加密密钥序列插入到代码密文对应的文件头上,文件头可以包括1024位字节,而随机密钥可以存储在第256~259字节中,或者可以预先设置哈希值与加密密钥序列在文件头的存储位置的对应关系,得到目标代码标识后,根据目标代码标识进行哈希计算,得到目标哈希值,根据计算得到的目标哈希值获取对应的当前加密密钥的插入位置。

在一个实施例中,将代码密文以及加密密钥序列进行组合,得到组合后的代码数据包的步骤之前还包括:对目标代码标识进行哈希计算,得到对应的目标哈希值。根据目标哈希值得到加密密钥序列对应的数据插入位置。将代码密文以及加密密钥序列进行组合,得到组合后的代码数据包的步骤包括:根据数据插入位置在代码密文中插入加密密钥序列,得到组合后的代码数据包。

具体地,哈希算法为可以把任意长度的输入通过散列算法变换成一定长度的输出的计算方法,散列算法可以为md5(message-digestalgorithm5,信息摘要算法5)算法和sha(securehashstandard、安全哈希标准)算法等,具体可以根据需要进行设置。加密密钥序列对应的插入位置是根据目标代码标识得到的。设置了哈希值与插入位置的对应关系。例如,可以设置哈希值为0~100对应的插入位置可以为代码密文的第256字节之后,哈希值为101~500对应的插入位置可以为代码密文的第567字节之前等。得到目标代码标识后,对目标代码标识进行哈希计算,得到对应的目标哈希值。然后根据目标哈希值得到所对应的插入位置,将加密密钥序列插入到对应的插入位置中,得到代码数据包。

在一个实施例中,也可以获取服务器的私钥,利用服务器的私钥对加密密钥序列进行加密。

在一个实施例中,还可以对加密密钥序列进行进一步加密后再插入到对应的插入位置中。例如,服务器可以获取终端的公钥,然后利用公钥对加密密钥序列进行加密,得到密钥密文,再与代码密文进行组合,得到代码数据包。

在一个实施例中,如图4所示,提供了一种代码解密方法,以该方法应用于图1中的终端为例进行说明,包括以下步骤:

步骤s402,获取目标代码对应的代码密文,获取对目标代码进行解密的解密密钥序列,解密密钥序列包括多个解密密钥。

具体地,代码密文是需要进行解密的目标代码对应的密文。代码密文可以是在运行应用程序的过程中,终端向服务器发送代码获取请求,服务器响应于终端的代码获取请求获取得到的。代码密文也可以是终端中存储的代码密文。解密密钥序列是加密密钥序列对应的密钥序列,在对称加密算法中,加密密钥序列与解密密钥序列是相同的,在不对称加密算法中,加密密钥序列与解密密钥序列是不相同的。解密密钥序列可以是在服务器发送代码密文时一同发送的,解密密钥序列也可以是服务器预先发送给终端的。

步骤s404,根据代码密文的字节顺序从代码密文中获取当前待解密字节,根据解密密钥序列的密钥顺序从解密密钥序列中获取当前解密密钥。

具体地,当前待解密字节是指代码密文中当前需要进行解密的字节,当前解密密钥是指对当前待解密字节进行解密的密钥。代码密文包括多个字节,可以根据代码密文的字节顺序依次获取当前待解密字节,可以根据解密密钥序列的字节顺序依次获取当前解密密钥,然后根据对应的当前解密密钥对获取的当前待解密字节进行解密。在一个实施例中,解密密钥序列的个数少于代码密文的字节个数,因此,当解密密钥序列中的解密密钥依次获取完毕后,可以从解密密钥序列的第一个解密密钥开始循环获取解密密钥,直至代码密文的字节被解密完毕。

步骤s406,根据当前解密密钥对当前待解密字节进行解密,得到对应的当前字节明文。

具体地,解密算法根据加密算法进行设置,例如当加密算法为异或运算时,则对应的解密算法为异或运算。当加密算法为向左移三位时,解密算法为向右移三位。得到当前待解密字节后,根据当前解密密钥进行解密,得到对应的当前字节明文。

在一个实施例中,根据当前解密密钥对当前待解密字节进行解密,得到对应的当前字节明文的步骤包括:对当前待解密字节进行切分,得到多个对应的待解密比特位数据块。根据当前解密密钥对各个待解密比特位数据块采用不同的解密算法进行解密,得到各个待解密比特位数据块对应的比特位明文。将各个比特位明文进行组合,得到对应的当前字节明文。

具体地,待解密比特位数据块的个数具体根据待解密比特位数据块的个数得到。例如当待加密比特位数据块为2个时,则待解密比特位数据块为2个。不同的解密算法可以是指解密密钥不同或者解密运算的方法不同中的一种或两种。对每个待解密比特位数据块采用不同的解密算法进行解密运算,得到每个待解密比特位数据块对应的比特位明文,然后将各个比特位明文进行组合,得到对应的当前字节明文。例如,假设待解密字节0x9a,当前解密密钥为0xca,加密运算为当前待解密字节的高四位比特位与当前解密密钥的高四位比特位进行异或运算。待解密字节的低四位比特位与当前解密密钥的低四位比特位进行异或运算。则可以取出0x9a高四位比特位异或0xca高四位比特位得到代码明文的高四位,取出0x9a低四位比特位异或0xca低四位比特位得到明文的低四位,将明文的高四位与明文的低四位进行组合,得到的字节明文为0x55。

步骤s408,返回根据代码密文的字节顺序从代码密文中获取当前待解密字节,根据解密密钥序列的密钥顺序从解密密钥序列中获取当前解密密钥的步骤,直至代码密文的待解密字节解密完毕。

具体地,若代码密文中的待解密字节还未解密完毕,则根据代码密文的字节顺序将代码密文中下一个待解密字节作为当前待解密字节,根据解密密钥序列的密钥顺序将下一个解密密钥作为取当前解密密钥,重复步骤s402~408,直到代码密文的待解密字节解密完毕。例如,假设代码密文包括n个待解密字节,解密密钥序列包括k个解密密钥,其中,n大于k,且n与k均为大于1的正整数。则开始解密时,获取代码密文的第一个字节作为当前待解密字节,获取解密密钥序列的第一个解密密钥作为当前解密密钥,根据第一个解密密钥对第一个字节进行解密,当第一个字节解密成功后,获取代码密文的第二个字节作为当前待解密字节,获取解密密钥序列的第二个解密密钥作为当前解密密钥,根据第二个解密密钥对第二个字节进行解密,当第二个字节解密成功后,继续根据字节顺序获取当前待解密字节,直至根据第a个密钥对第n个字节进行解密成功后停止。其中,当n除以k的余数1~k-1之间的数值时,a等于n除以k的余数。当n除以k的余数为0时,a等于k。

步骤s410,将得到的各个字节明文进行组合,得到代码密文对应的目标代码。

具体地,当代码密文的待解密字节解密完毕后,将得到的各个字节明文进行组合,得到代码密文对应的目标代码。例如,若代码密文的第一个字节对应的目标代码的字节为c1,第二个字节对应的目标代码的字节为c2,第三个字节对应的目标代码的字节为c3。则组合得到的目标代码为c1c2c3。

上述代码解密方法,获取目标代码对应的代码密文,获取对目标代码进行解密的解密密钥序列,解密密钥序列包括多个解密密钥;根据代码密文的字节顺序从代码密文中获取当前待解密字节,根据解密密钥序列的密钥顺序从解密密钥序列中获取当前解密密钥,根据当前解密密钥对当前待解密字节进行解密,得到对应的当前字节明文,返回根据代码密文的字节顺序从代码密文中获取当前待解密字节,根据解密密钥序列的密钥顺序从解密密钥序列中获取当前解密密钥的步骤,直至代码密文的待解密字节解密完毕,将得到的各个字节明文进行组合,得到代码密文对应的目标代码。由于能够结合代码密文的字节顺序以及包括多个解密密钥的解密密钥序列的密钥顺序对目标代码对应的密文进行解密,而且是以字节为单位对代码进行解密,因此,代码被解密的难度大,提高了代码安全性。

在一个实施例中,如图5所示,代码解密方法还可以包括以下步骤:

步骤s502,在运行应用的过程中,获取目标代码标识。

具体地,可以将应用程序的部分代码以插件的形式存储在服务器中,终端存储对应的插件标识,即目标代码标识。当终端运行应用时需要运行目标插件时,获取目标代码标识。

步骤s504,向服务器发送目标代码获取请求,目标代码获取请求携带目标代码标识。

具体地,得到目标代码标识后,向服务器发送目标代码获取请求,并携带目标代码标识,以使得服务器可以根据目标代码标识得到目标代码。

步骤s402即获取目标代码对应的代码密文,获取对目标代码进行解密的解密密钥序列的步骤包括:

s402a,接收目标代码对应的代码数据包,代码数据包是根据代码密文以及加密密钥序列组合得到的,代码密文是服务器根据加密密钥序列对目标代码进行加密得到的。

具体地,目标代码是服务器根据目标代码标识获取的,得到目标代码后,服务器利用加密密钥序列对目标代码进行加密,得到代码密文,并将加密密钥序列与代码密文进行组合,得到代码数据包,将代码数据包发送给终端,终端接收代码数据包。

s402b,对代码数据包进行解析,得到代码密文以及加密密钥序列,将加密密钥序列作为解密密钥序列。

具体地,当前终端得到代码数据包后,对代码数据包进行解析,提取得到代码密文以及加密密钥序列。例如,若加密密钥序列是插入到预设位置的,则可以从预设位置提取得到加密密钥序列,并将加密密钥序列作为解密密钥序列。

在一个实施例中,当加密密钥序列对应的数据插入位置是根据目标代码标识计算得到的目标哈希值得到的时,终端可以根据目标代码标识计算得到目标哈希值,然后根据目标哈希值获取加密密钥序列在代码数据包的位置,从代码数据包中提取得到加密密钥序列。例如,当加密密钥序列为4个字节,计算得到的目标哈希值为50,当哈希值为0~100对应的插入位置为代码密文的第256字节之后时,则可以将代码数据包中的第256字节之后的4个字节作为加密密钥序列。

在一个实施例中,加密密钥序列可以是利用终端的加密公钥进行加密后得到的密钥密文,因此,得到代码数据包后,解析得到密钥密文,终端利用私钥对密钥密文进行解密,得到加密密钥序列。

在一个实施例中,当加密密钥序列是利用服务器的私钥进行加密时,终端可以获取服务器的公钥,利用服务器的公钥对密钥密文进行解密。

以下以一个具体的实施例对本发明实施例提供的代码加密方法以及解密方法进行说明。终端在运行应用时,检测到需要运行的代码是存储在服务器的,插件标识为001,因此可以向服务器发送代码获取请求,并携带插件标识001,服务器接收代码获取请求,根据插件标识001获取对应的插件,并随机生成长度为4个字节的随机密钥如key={0xca,0x75,0xfd,0xdc},假设插件包括“0x550xa90xe20xe3....0x55”等字节,可以将插件中每4个字节作为一个插件块,以第一个插件块为例,可以将插件块中的第一位字节0x55与加密密钥序列中的0xca进行加密计算。将插件块中的第二位字节0xa9与加密密钥序列的0x75进行加密计算,将插件块中的第三位字节0xe2与加密密钥序列的0xfd进行加密计算,将插件块中的第四位字节0xe3与加密密钥序列的0xdc进行加密计算。加密计算时,以对第一位字节0x55进行加密计算为例,可以取出0x55的高四位异或0xca高四位得到密文的高四位,取出0x55低四位异或0xca低四位得到密文的低四位,将密文的高4位以及低4位进行组合后得到一个加密的字节0x9a,如此将插件中的每4个字节作为一个插件块,根据加密密钥序列进行加密,得到加密后的插件,并利用服务器的rsa私钥对加密密钥序列进行加密得到密钥密文,将密钥密文插入到加密后的插件的预设位置上,得到代码数据包。其中密钥密文的在加密后的插件的存储位置可以是第256~259字节。服务器得到代码数据包后,向终端发送该代码数据包,终端接收代码数据包,利用服务器的rsa公钥对第256~259间的字节进行解密,得到加密密钥序列key={0xca,0x75,0xfd,0xdc}作为解密密钥序列,并从代码数据包中删除加密密钥序列后得到代码密文,如0x9a...0x9a。终端将代码密文进行切分,得到多个大小为4个字节的代码密文块,并根据解密密钥序列的密钥对代码密文块进行解密。举一个字节解密运算的例子,根据解密密钥序列的第一个密钥0xca对代码密文的第一个字节0x9a的进行解密时,可以取出0x9a高四位异或0xca高四位得到代码明文的高四位,取出0x9a低四位异或0xca低四位得到代码明文的低四位,计算后得到的字节0x55。当对代码密文均解密成功后,终端根据得到的插件运行应用程序。

应该理解的是,虽然上述的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,上述中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。

在一个实施例中,如图6所示,提供了一种代码加密装置,包括:代码及密钥获取模块602、加密字节及密钥获取模块604、加密模块606、第一返回模块608和密文组合模块610,其中:

代码及密钥获取模块602,用于获取待进行加密的目标代码,获取对目标代码进行加密的加密密钥序列,加密密钥序列包括多个加密密钥。

加密字节及密钥获取模块604,用于根据目标代码的字节顺序从目标代码中获取当前待加密字节,根据加密密钥序列的密钥顺序从加密密钥序列中获取当前加密密钥。

加密模块606,用于根据当前加密密钥对当前待加密字节进行加密,得到对应的当前字节密文。

第一返回模块608,用于返回根据目标代码的字节顺序从目标代码中获取当前待加密字节,根据加密密钥序列的密钥顺序从加密密钥序列中获取当前加密密钥的步骤,直至目标代码的待加密字节加密完毕。

密文组合模块610,用于将得到的各个字节密文进行组合,得到目标代码对应的代码密文。

在其中一个实施例中,加密模块606用于:对当前待加密字节进行切分,得到多个对应的待加密比特位数据块。根据当前加密密钥对各个待加密比特位数据块采用不同的加密算法进行加密,得到各个待加密比特位数据块对应的比特位密文。将各个比特位密文进行组合,得到对应的当前字节密文。

在其中一个实施例中,如图7所示,代码加密装置还包括:

请求接收模块702,用于接收终端发送的目标代码获取请求,目标代码获取请求携带目标代码标识。

代码及密钥获取模块602用于:根据目标代码标识获取待进行加密的目标代码。

代码加密装置还包括数据包组合模块704,用于将代码密文以及加密密钥序列进行组合,得到组合后的代码数据包,将代码数据包发送给终端。

在其中一个实施例中,代码加密装置还包括:

哈希计算模块,用于对目标代码标识进行哈希计算,得到对应的目标哈希值。

插入位置得到模块,用于根据目标哈希值得到加密密钥序列对应的数据插入位置。

数据包组合模块用于:根据数据插入位置在代码密文中插入加密密钥序列,得到组合后的代码数据包。

在其中一个实施例中,如图8所示,提供了一种代码加密装置,包括:

密文以及密钥获取模块802,用于获取目标代码对应的代码密文,获取对目标代码进行解密的解密密钥序列,解密密钥序列包括多个解密密钥。

解密字节以密钥获取模块804,用于根据代码密文的字节顺序从代码密文中获取当前待解密字节,根据解密密钥序列的密钥顺序从解密密钥序列中获取当前解密密钥。

解密模块806,用于根据当前解密密钥对当前待解密字节进行解密,得到对应的当前字节明文。

第二返回模块808,用于返回根据代码密文的字节顺序从代码密文中获取当前待解密字节,根据解密密钥序列的密钥顺序从解密密钥序列中获取当前解密密钥的步骤,直至代码密文的待解密字节解密完毕。

明文组合模块810,用于将得到的各个字节明文进行组合,得到代码密文对应的目标代码。

在其中一个实施例中,解密模块806用于:对当前待解密字节进行切分,得到多个对应的待解密比特位数据块。根据当前解密密钥对各个待解密比特位数据块采用不同的解密算法进行解密,得到各个待解密比特位数据块对应的比特位明文。将各个比特位明文进行组合,得到对应的当前字节明文。

在其中一个实施例中,如图9所示,代码解密装置还包括:

标识获取模块902,用于在运行应用的过程中,获取目标代码标识。

请求发送模块904,用于向服务器发送目标代码获取请求,目标代码获取请求携带目标代码标识。

密文以及密钥获取模块802用于:接收目标代码对应的代码数据包,代码数据包是根据代码密文以及加密密钥序列组合得到的,代码密文是服务器根据加密密钥序列对目标代码进行加密得到的。对代码数据包进行解析,得到代码密文以及加密密钥序列,将加密密钥序列作为解密密钥序列。

关于代码加密装置以及代码解密装置的具体限定可以参见上文中对于代码加密方法以及代码解密方法的限定,在此不再赘述。上述代码加密装置以及代码解密装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。

在一个实施例中,提供了一种计算机设备,该计算机设备可以是服务器,其内部结构图可以如图10所示。该计算机设备包括通过系统总线连接的处理器、存储器和网络接口。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库用于存储代码加密数据。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种代码加密方法。

在一个实施例中,提供了一种计算机设备,该计算机设备可以是终端,其内部结构图可以如图11所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口、显示屏和输入装置。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种代码解密方法。该计算机设备的显示屏可以是液晶显示屏或者电子墨水显示屏,该计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。

本领域技术人员可以理解,图10以及图11中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。

在一个实施例中,提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现以下步骤:获取待进行加密的目标代码,获取对目标代码进行加密的加密密钥序列,加密密钥序列包括多个加密密钥;根据目标代码的字节顺序从目标代码中获取当前待加密字节,根据加密密钥序列的密钥顺序从加密密钥序列中获取当前加密密钥;根据当前加密密钥对当前待加密字节进行加密,得到对应的当前字节密文;返回根据目标代码的字节顺序从目标代码中获取当前待加密字节,根据加密密钥序列的密钥顺序从加密密钥序列中获取当前加密密钥的步骤,直至目标代码的待加密字节加密完毕;将得到的各个字节密文进行组合,得到目标代码对应的代码密文。

在一个实施例中,处理器所执行的根据当前加密密钥对当前待加密字节进行加密,得到对应的当前字节密文的步骤包括:对当前待加密字节进行切分,得到多个对应的待加密比特位数据块;根据当前加密密钥对各个待加密比特位数据块采用不同的加密算法进行加密,得到各个待加密比特位数据块对应的比特位密文;将各个比特位密文进行组合,得到对应的当前字节密文。

在一个实施例中,处理器执行计算机程序时还实现以下步骤:接收终端发送的目标代码获取请求,目标代码获取请求携带目标代码标识;获取待进行加密的目标代码的步骤包括:根据目标代码标识获取待进行加密的目标代码;方法还包括:将代码密文以及加密密钥序列进行组合,得到组合后的代码数据包,将代码数据包发送给终端。

在一个实施例中,处理器所执行的将代码密文以及加密密钥序列进行组合,得到组合后的代码数据包的步骤之前还包括:对目标代码标识进行哈希计算,得到对应的目标哈希值;根据目标哈希值得到加密密钥序列对应的数据插入位置;将代码密文以及加密密钥序列进行组合,得到组合后的代码数据包的步骤包括:根据数据插入位置在代码密文中插入加密密钥序列,得到组合后的代码数据包。

在一个实施例中,提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现以下步骤:获取目标代码对应的代码密文,获取对目标代码进行解密的解密密钥序列,解密密钥序列包括多个解密密钥。根据代码密文的字节顺序从代码密文中获取当前待解密字节,根据解密密钥序列的密钥顺序从解密密钥序列中获取当前解密密钥;根据当前解密密钥对当前待解密字节进行解密,得到对应的当前字节明文;返回根据代码密文的字节顺序从代码密文中获取当前待解密字节,根据解密密钥序列的密钥顺序从解密密钥序列中获取当前解密密钥的步骤,直至代码密文的待解密字节解密完毕;将得到的各个字节明文进行组合,得到代码密文对应的目标代码。

在一个实施例中,处理器所执行的根据当前解密密钥对当前待解密字节进行解密,得到对应的当前字节明文的步骤包括:对当前待解密字节进行切分,得到多个对应的待解密比特位数据块;根据当前解密密钥对各个待解密比特位数据块采用不同的解密算法进行解密,得到各个待解密比特位数据块对应的比特位明文;将各个比特位明文进行组合,得到对应的当前字节明文。

在一个实施例中,处理器执行计算机程序时还实现以下步骤:在运行应用的过程中,获取目标代码标识;向服务器发送目标代码获取请求,目标代码获取请求携带目标代码标识;获取目标代码对应的代码密文,获取对目标代码进行解密的解密密钥序列的步骤包括:接收目标代码对应的代码数据包,代码数据包是根据代码密文以及加密密钥序列组合得到的,代码密文是服务器根据加密密钥序列对目标代码进行加密得到的;对代码数据包进行解析,得到代码密文以及加密密钥序列,将加密密钥序列作为解密密钥序列。

在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:获取待进行加密的目标代码,获取对目标代码进行加密的加密密钥序列,加密密钥序列包括多个加密密钥;根据目标代码的字节顺序从目标代码中获取当前待加密字节,根据加密密钥序列的密钥顺序从加密密钥序列中获取当前加密密钥;根据当前加密密钥对当前待加密字节进行加密,得到对应的当前字节密文;返回根据目标代码的字节顺序从目标代码中获取当前待加密字节,根据加密密钥序列的密钥顺序从加密密钥序列中获取当前加密密钥的步骤,直至目标代码的待加密字节加密完毕;将得到的各个字节密文进行组合,得到目标代码对应的代码密文。

在一个实施例中,处理器所执行的根据当前加密密钥对当前待加密字节进行加密,得到对应的当前字节密文的步骤包括:对当前待加密字节进行切分,得到多个对应的待加密比特位数据块;根据当前加密密钥对各个待加密比特位数据块采用不同的加密算法进行加密,得到各个待加密比特位数据块对应的比特位密文;将各个比特位密文进行组合,得到对应的当前字节密文。

在一个实施例中,处理器执行计算机程序时还实现以下步骤:接收终端发送的目标代码获取请求,目标代码获取请求携带目标代码标识;获取待进行加密的目标代码的步骤包括:根据目标代码标识获取待进行加密的目标代码;方法还包括:将代码密文以及加密密钥序列进行组合,得到组合后的代码数据包,将代码数据包发送给终端。

在一个实施例中,处理器所执行的将代码密文以及加密密钥序列进行组合,得到组合后的代码数据包的步骤之前还包括:对目标代码标识进行哈希计算,得到对应的目标哈希值;根据目标哈希值得到加密密钥序列对应的数据插入位置;将代码密文以及加密密钥序列进行组合,得到组合后的代码数据包的步骤包括:根据数据插入位置在代码密文中插入加密密钥序列,得到组合后的代码数据包。

在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:获取目标代码对应的代码密文,获取对目标代码进行解密的解密密钥序列,解密密钥序列包括多个解密密钥。根据代码密文的字节顺序从代码密文中获取当前待解密字节,根据解密密钥序列的密钥顺序从解密密钥序列中获取当前解密密钥;根据当前解密密钥对当前待解密字节进行解密,得到对应的当前字节明文;返回根据代码密文的字节顺序从代码密文中获取当前待解密字节,根据解密密钥序列的密钥顺序从解密密钥序列中获取当前解密密钥的步骤,直至代码密文的待解密字节解密完毕;将得到的各个字节明文进行组合,得到代码密文对应的目标代码。

在一个实施例中,处理器所执行的根据当前解密密钥对当前待解密字节进行解密,得到对应的当前字节明文的步骤包括:对当前待解密字节进行切分,得到多个对应的待解密比特位数据块;根据当前解密密钥对各个待解密比特位数据块采用不同的解密算法进行解密,得到各个待解密比特位数据块对应的比特位明文;将各个比特位明文进行组合,得到对应的当前字节明文。

在一个实施例中,处理器执行计算机程序时还实现以下步骤:在运行应用的过程中,获取目标代码标识;向服务器发送目标代码获取请求,目标代码获取请求携带目标代码标识;获取目标代码对应的代码密文,获取对目标代码进行解密的解密密钥序列的步骤包括:接收目标代码对应的代码数据包,代码数据包是根据代码密文以及加密密钥序列组合得到的,代码密文是服务器根据加密密钥序列对目标代码进行加密得到的;对代码数据包进行解析,得到代码密文以及加密密钥序列,将加密密钥序列作为解密密钥序列。

本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(rom)、可编程rom(prom)、电可编程rom(eprom)、电可擦除可编程rom(eeprom)或闪存。易失性存储器可包括随机存取存储器(ram)或者外部高速缓冲存储器。作为说明而非局限,ram以多种形式可得,诸如静态ram(sram)、动态ram(dram)、同步dram(sdram)、双数据率sdram(ddrsdram)、增强型sdram(esdram)、同步链路(synchlink)dram(sldram)、存储器总线(rambus)直接ram(rdram)、直接存储器总线动态ram(drdram)、以及存储器总线动态ram(rdram)等。

以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。

以上实施例仅表达了本申请的几种实施方式,其描述较为具体,但并不能因此而理解为对发明专利范围的限制。对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1