具体实施方式
下面结合附图和实施例对本申请作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释相关发明,而非对该发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与有关发明相关的部分。
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本申请。
图1示出了可以应用本申请的用于加密数据的方法的实施例的示例性系统架构100。
如图1所示,系统架构100可以包括终端设备1011、1012、1013,网络102和服务器103。网络102用以在终端设备1011、1012、1013和服务器103之间提供通信链路的介质。网络102可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。
用户可以使用终端设备1011、1012、1013通过网络102与服务器103交互,以发送或接收消息等,例如,终端设备1011、1012、1013可以将密文发送给服务器103。终端设备1011、1012、1013上可以安装有各种通讯客户端应用,例如网页浏览类应用、即时通讯软件、支付类应用等。
终端设备1011、1012、1013可以是硬件,也可以是软件。当终端设备1011、1012、1013为硬件时,可以是具有扬声器并且支持信息交互的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机等。当终端设备1011、1012、1013为软件时,可以安装在上述所列举的电子设备中。其可以实现成多个软件或软件模块(例如用来提供分布式服务的多个软件或软件模块),也可以实现成单个软件或软件模块。在此不做具体限定。
服务器103可以是提供各种服务的服务器。例如,可以对终端设备1011、1012、1013发送的密文进行处理的服务器。服务器103可以首先响应于接收到密文,获取与接收到的密文对应的明文;之后,可以获取基于预设的密码表和预设的初始密钥所生成的目标密钥;而后,可以利用预设的加密算法和上述目标密钥,对上述明文进行加密得到初始密文;最后,可以对上述初始密文执行预设第一操作,生成目标密文。
需要说明的是,服务器103可以是硬件,也可以是软件。当服务器103为硬件时,可以实现成多个服务器组成的分布式服务器集群,也可以实现成单个服务器。当服务器103为软件时,可以实现成多个软件或软件模块(例如用来提供分布式服务),也可以实现成单个软件或软件模块。在此不做具体限定。
需要说明的是,本申请实施例所提供的用于加密数据的方法通常由服务器103执行。
还需要说明的是,服务器103的本地也可以存储有待校验的密文,服务器103可以从本地获取待校验的密文。此时示例性系统架构100可以不存在网络102和终端设备1011、1012、1013。
应该理解,图1中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。
继续参考图2,示出了根据本申请的用于加密数据的方法的一个实施例的流程200。该用于加密数据的方法,包括以下步骤:
步骤201,响应于接收到密文,获取与接收到的密文对应的明文。
在本实施例中,用于加密数据的方法的执行主体(例如图1所示的服务器)可以确定是否接收到密文。作为示例,用户在网页上输入登录密码,点击确认图标之后,服务器可以接收到用户终端发送的登录密码的密文。若确定出接收到密文,上述执行主体可以获取与接收到的密文对应的明文。明文是指没有加密的文字或者字符串,对明文进行加密可以得到密文。在这里,与登录密码的密文对应的明文为上述登录密码。
在本实施例中,在获取到明文之后,上述执行主体可以确定上述明文是否为空以及确定上述明文是否为字符串类型。若确定出上述明文为空,则上述执行主体可以输出用于表征明文不能为空的错误信息。若确定出上述明文不是字符串类型,则上述执行主体可以输出用于表征上述明文不是字符串类型的错误信息。
步骤202,获取目标密钥。
在本实施例中,上述执行主体可以获取目标密钥。在这里,上述目标密钥可以是基于预设的密码表和预设的初始密钥所确定的。上述密码表可以是用户设置的、由预设第一数目(例如,64)个数字所组成的数组。上述密码表中的密码值可以为十六进制,每个密码值的取值区间可以为0到0xFFFF。需要说明的是,以0x开始的数据表示十六进制。用户可以对上述密码表中的密码值进行修改。上述初始密钥通常为number(数字)类型,上述初始密钥的取值区间可以为0到0x7FFFFFFF。
步骤203,利用预设的加密算法和目标密钥,对明文进行加密得到初始密文。
在本实施例中,上述执行主体可以利用预设的加密算法和步骤202中获取到的目标密钥,对步骤201中获取到的明文进行加密得到初始密文。上述加密算法可以为常用的加密算法,例如,MD5消息摘要算法和安全散列算法。在这里,利用加密算法和密钥对明文加密得到密文的方法是目前广泛研究和应用的公知技术,在此不再赘述。
步骤204,对初始密文执行预设第一操作,生成目标密文。
在本实施例中,上述执行主体可以对步骤203中加密得到的初始密文执行预设第一操作,生成目标密文。
作为一种示例,上述执行主体可以从上述初始密文中选取预设第三数目个字符组成字符串作为目标密文。上述第三数目可以为上述初始密文的字符串长度的预设比例,例如,二分之一、四分之一等。上述执行主体可以从上述初始密文中按照由前到后的顺序或者由后到前的顺序选取索引为偶数的位置上的、预设第三数目个字符组成字符串作为目标密文。上述执行主体可以从上述初始密文中按照由前到后的顺序或者由后到前的顺序选取索引为奇数的位置上的、预设第三数目个字符组成字符串作为目标密文。
作为另一种示例,上述执行主体也可以从上述初始密文中选取字符,将选取出的字符替换成预设第一字符(例如,1、3等),将替换后的字符串作为目标密文。
在本实施例的一些可选的实现方式中,上述目标密钥可以是通过如下步骤确定的:首先,可以对预设的密码表中的预设第一数目个密码值执行预设第二操作,生成初始字符串。作为示例,可以对预设的密码表中的预设第一数目个密码值中的每个密码值与预设数字进行异或操作得到异或结果,按照密码值在上述密码表中的位置对各个密码值对应的异或结果进行拼接得到初始字符串。之后,可以基于预设的初始密钥,对上述初始字符串中的字符进行替换,得到目标密钥。作为一种示例,可以基于预设的初始密钥,从上述初始字符串中选取字符,例如,可以将初始密钥划分成字符,将划分出的每个字符转换成十六进制数,在上述初始字符串中选取索引为上述转换成的十六进制数的位置上的字符;之后,可以将选取出的字符替换成预设第二字符(例如,A、F等)得到目标密钥。作为另一种示例,可以从上述初始字符串中选取预设位置(例如,索引为奇数的位置)上的字符;之后,可以将初始密钥划分成字符,将划分出的每个字符转换成十六进制数,求取各个十六进制数的平均数,再对平均数进行取整操作(例如,向上取整或者向下取整);而后,将选取出的字符替换成上述取整操作所得到的整数,将得到的字符串确定为目标密钥。
在本实施例的一些可选的实现方式中,上述执行主体可以通过如下方式对上述初始密文执行预设第一操作,生成目标密文:上述执行主体可以首先对上述初始密文中的字符进行处理,得到更新后的密文。作为示例,上述执行主体可以从上述初始密文中按照由前到后的顺序或者由后到前的顺序选取索引为偶数的位置上的字符,将选取出的字符替换成预设第三字符,得到更新后的密文。上述执行主体也可以从上述初始密文中按照由前到后的顺序或者由后到前的顺序选取索引为奇数的位置上的字符,将选取出的字符替换成预设第四字符,得到更新后的密文。而后,可以从上述更新后的密文中选取预设第二数目个字符组成字符串作为目标密文。上述预设第二数目可以为上述更新后的密文的长度的预设数值,例如,二分之一,四分之一等。作为示例,上述执行主体可以从上述更新后的密文中按照由前到后的顺序选取上述第二数目个字符组成字符串作为目标密文。上述执行主体也可以从上述更新后的密文中按照由后到前的顺序选取上述第二数目个字符组成字符串作为目标密文。
在本实施例的一些可选的实现方式中,在得到初始密文之后,上述执行主体还可以确定上述初始密文是否为空以及确定上述初始密文是否为零。若确定出上述初始密文为空或者确定出上述初始密文为零,则上述执行主体可以输出错误信息。上述错误信息可以包括用于表征上述初始密文为空的第一错误信息和用于表征上述初始密文为零的第二错误信息。
本申请的上述实施例提供的方法在公开的加密算法的基础上又进行了一次加密,从而提高了数据的安全性。
继续参考图3,图3是根据本申请的用于加密数据的方法中生成目标密钥的流程300。如图3所示,本实施例中,生成目标密钥的生成步骤包括:
步骤301,遍历预设的密码表中的预设第一数目个密码值,对当前遍历的密码值向右位移目标位数,得到第一数值,截取第一数值的低预设第二数值位,将截取得到的数值转换成第一字符串。
在本实施例中,上述执行主体可以遍历预设的密码表中的预设第一数目个密码值。遍历是指沿着某条搜索路线,依次对树(或图)中每个节点均做一次访问。在这里,上述执行主体可以按照密码值在上述密码表中的位置由前到后的顺序依次对上述密码表中的每个密码值进行一次访问。上述密码表可以是用户设置的、由预设第一数目(例如,64)个数字所组成的数组。上述密码表中的密码值可以为十六进制,每个密码值的取值区间可以为0到0xFFFF。需要说明的是,以0x开始的数据表示十六进制。密码值中的每个字符为四位。用户可以对上述密码表中的密码值进行修改。
通常来说,对预设的密码表进行遍历的过程中可以为密码表中的密码值设置索引,例如,若上述密码表的长度(上述第一数目)为64,可以将所访问的第一个密码值的索引设置为0,将所访问的第二个密码值的索引设置为1,以此类推,将所访问的最后一个密码值的索引设置为63。
在本实施例中,上述执行主体可以对当前遍历(访问)的密码值向右位移目标位数,得到第一数值。在这里,上述目标位数可以是基于当前遍历的密码值在上述密码表中的位置所确定的。基于当前遍历的密码值在上述密码表中的位置可以确定出当前遍历的密码值对应的索引,可以将当前遍历的密码值对应的索引除以4所得到的余数确定为上述目标位数。作为示例,若当前遍历的密码值在上述密码表中的第6位,则该密码值对应的索引为5,索引5除以4所得到的余数为1,则上述目标位数为1,可以将当前遍历的密码值向右位移1位(bit)得到第一数值。
之后,上述执行主体可以截取上述第一数值的低预设第二数值位,将截取得到的数值转换成第一字符串。在这里,上述第二数值可以为4,即截取上述第一数值的低四位,再将截取到的低四位数值转换为字符串作为第一字符串。上述第一字符串可以由十六进制数组成。作为示例,若上述第一数值为010111001001110,截取010111001001110的低四位得到的数值为1110,将1110转换成字符串为E。
步骤302,按照对第一数目个密码值的遍历顺序,对各个密码值对应的第一字符串进行拼接,得到初始字符串。
在本实施例中,上述执行主体可以按照对上述第一数目个密码值的遍历顺序,对各个密码值对应的第一字符串进行拼接,得到初始字符串。作为示例,若按照遍历顺序所遍历的第一个密码值对应的第一字符串分别为A、4、7、D、4、B、1、1,则对第一字符串拼接所得到的初始字符串为A47D4B11。
步骤303,基于初始字符串和预设的初始密钥,执行如下替换步骤:截取初始密钥的低预设第三数值位,得到第四数值;将第四数值除以第一数目所得到的余数确定为目标数值;基于目标数值,从密码表中确定出目标密码值;将目标密码值向右位移预设第五数值位,再截取低预设第六数值位,将截取得到的数值转换成第二字符串;将初始字符串中的第目标数值个字符替换成第二字符串,得到更新后的字符串;将初始密钥向右位移预设第七数值位所得到的字符作为更新后的密钥;判断更新后的密钥是否大于预设第八数值;若更新后的密钥不大于第八数值,则将更新后的字符串确定为目标密钥;
若更新后的密钥大于第八数值,则将更新后的字符串作为初始字符串以及将更新后的密钥作为初始密钥继续执行上述替换步骤。
在本实施例中,上述执行主体可以基于步骤302所得到的初始字符串和预设的初始密钥,执行替换步骤。上述初始密钥通常为number(数字)类型,上述初始密钥的取值区间可以为0到0x7FFFFFFF。
在本实施例中,在获取到预设的初始密钥之后,上述执行主体可以确定上述初始密钥是否为空、上述初始密钥是否为number类型以及上述初始密钥的取值区间是否在0到0x7FFFFFFF之间。若确定出上述初始密钥为空,则上述执行主体可以输出上述初始密钥为空的错误信息。若确定出上述初始密钥不是number类型,则上述执行主体可以输出上述初始密钥的类型错误的错误信息。若确定出上述初始密钥的取值区间不在0到0x7FFFFFFF之间,则上述执行主体可以输出上述初始密钥的取值区间错误的错误信息。
在本实施例中,步骤303可以包括子步骤3031、3032、3033、3034、3035、3036、3037和3038。其中:
步骤3031,截取初始密钥的低预设第三数值位,得到第四数值。
在这里,上述执行主体可以截取上述初始密钥的低预设第三数值位,得到第四数值。在这里,上述第三数值可以为8,即截取上述第三数值的低八位,得到第四数值。作为示例,若上述初始密钥为0x7A42C671,则截取到的低八位为71,由十六进制71转换成的第四数值为113。
步骤3032,将第四数值除以第一数目所得到的余数确定为目标数值。
在这里,上述执行主体可以将在步骤3031中得到的第四数值除以上述第一数目所得到的余数确定为目标数值。上述第一数目为上述密码表中的密码值的数目,也可以理解为上述密码表的长度。作为示例,若上述第四数值为113,上述第一数目为64,则上述目标数值为49。
步骤3033,基于目标数值,从密码表中确定出目标密码值。
在这里,上述执行主体可以基于目标数值,从上述密码表中确定出目标密码值。具体地,上述执行主体可以将上述密码表中索引为上述目标数值的密码值确定为目标密码值。作为示例,若上述目标数值为49,则可以将上述密码表中索引为49的密码值0x16D6确定为目标密码值。
步骤3034,将目标密码值向右位移预设第五数值位,再截取低预设第六数值位,将截取得到的数值转换成第二字符串。
在这里,上述执行主体可以将上述目标密码值向右位移预设第五数值位,再截取低预设第六数值位,将截取得到的数值转换成第二字符串。在这里,上述第五数值可以为8,上述第六数值可以为4,即将上述目标密码值向右位移八位,再截取低四位,将截取得到的四位二进制数转换成十六进制数作为第二字符串。作为示例,若上述目标密码值为0x16D6,将上述目标密码值0x16D6向右位移八位得到00010110,再截取00010110的低四位得到0110,将截取得到的数值0110转换成第二字符串为6。
步骤3035,基于目标数值,从初始字符串中选取出目标字符,将选取出的目标字符替换成第二字符串,得到更新后的字符串。
在这里,上述执行主体可以基于上述目标数值,从上述初始字符串中选取出目标字符,将选取出的目标字符替换成上述第二字符串,得到更新后的字符串。具体地,上述执行主体可以从上述初始字符串中选取出对应的索引为上述目标数值的字符作为目标字符。针对上述初始字符串中的每个字符,该字符对应的索引通常为该字符对应的密码值对应的索引。在步骤301中,第一字符串是通过对密码值进行位移、截取和转换操作所得到的,此时,可以建立第一字符串与密码值之间的对应关系。作为示例,若上述目标数值为49,上述第二字符串为6,上述执行主体可以从上述初始字符串中选取出对应的索引为49的字符3作为目标字符,将选取出的目标字符3替换成上述第二字符串6,从而得到更新后的字符串。
步骤3036,将初始密钥向右位移预设第七数值位所得到的字符作为更新后的密钥。
在这里,上述执行主体可以将步骤3031中的初始密钥向右位移预设第七数值位所得到的字符作为更新后的密钥。在这里,上述第七数值可以为4,即将上述初始密钥向右位移四位所得到的字符作为更新后的密钥。作为示例,若上述初始密钥为0x7A42C671,则可以将初始密钥0x7A42C671向右位移四位所得到的字符0x7A42C67作为更新后的密钥。
步骤3037,判断更新后的密钥是否大于预设第八数值。
在这里,上述执行主体可以判断在步骤3036中得到的更新后的密钥是否大于预设第八数值。在这里,上述第八数值可以为0,即判断上述更新后的密钥是否大于0。若判断出上述更新后的密钥不大于0(上述更新后的密钥等于0),则上述执行主体可以执行步骤3038。若判断出上述更新后的密钥大于0,则上述执行主体可以执行步骤3039。
步骤3038,响应于判断出更新后的密钥不大于第八数值,将更新后的字符串确定为目标密钥。
在这里,若在步骤3037中判断出上述更新后的密钥不大于0(上述更新后的密钥等于0),则上述执行主体可以将步骤3035中得到的更新后的字符串确定为目标密钥。
步骤3039,响应于判断出更新后的密钥大于第八数值,将更新后的字符串作为初始字符串以及将更新后的密钥作为初始密钥继续执行上述替换步骤。
在这里,若在步骤3037中判断出上述更新后的密钥大于0,则上述执行主体可以将更新后的字符串作为初始字符串以及将更新后的密钥作为初始密钥继续执行上述替换步骤,即步骤3031-步骤3038,形成循环。
本申请的上述实施例提供的方法公开了一种基于预设的密码表和预设的初始密钥生成目标密钥方式,通过这种方式可以更加灵活地生成密码。
进一步参考图4,图4是根据本申请的用于加密数据的方法中对初始密文执行预设第一操作生成目标密文的流程400。如图4所示,本实施例中,生成目标密文的生成步骤包括:
步骤401,对初始密文进行划分得到字符串集合。
在本实施例中,上述执行主体可以对上述初始密文进行划分得到字符串集合。通常来说,上述字符串集合中的字符串通常具有相同的长度。具体地,上述执行主体可以遍历上述初始密文,按照遍历顺序对上述初始密文进行划分,例如,可以每遍历一个字符执行一次划分操作,此时,字符串集合中的字符串的长度为1;也可以每遍历两个字符执行一次划分操作,此时,字符串集合中的字符串的长度为2。
步骤402,针对字符串集合中的每个字符串,将该字符串转换成数字,将得到的数字与预设数字进行异或操作所得到的数字转换成字符串作为处理后的字符串。
在本实施例中,针对在步骤401中得到的字符串集合中的每个字符串,上述执行主体可以将该字符串转换成数字,将得到的数字与预设数字进行异或操作所得到的数字转换成字符串作为处理后的字符串。具体地,上述执行主体可以将该字符串转换成十六进制数,将得到的十六进制数与预设数字进行异或操作。需要说明的是,上述预设数字的位数通常与所得到的十六进制数的位数相同。若所得到的十六进制数为两位,则上述预设数字的位数也为两位,例如,可以为0xFF;若所得到的十六进制数为一位,则上述预设数字的位数也为一位,例如,可以为0xF。作为示例,若针对字符串集合中的字符串A2,将字符串A2转换成十六进制数为0x A2,将0x A2与预设数字0xFF进行异或操作所得到的数字转换成字符串为5D。
步骤403,按照字符串集合中的每个字符串在初始密文中的位置由前到后的顺序对各个字符串对应的处理后的字符串进行拼接,得到更新后的密文。
在本实施例中,上述执行主体可以按照上述字符串集合中的每个字符串在上述初始密文中的位置由前到后的顺序对各个字符串对应的处理后的字符串进行拼接,得到更新后的密文。作为示例,若按照在上述初始密文中的位置由前到后的顺序,对上述字符串集合中的字符串进行排序的排序结果为:A2、23、D1、A7、57、11,字符串A2对应的处理后的字符串为5D,字符串23对应的处理后的字符串为DC,字符串D1对应的处理后的字符串为2E,字符串A7对应的处理后的字符串为58,字符串57对应的处理后的字符串为A8,字符串11对应的处理后的字符串为EE,则对各个字符串对应的处理后的字符串进行拼接得到的更新后的密文为5DDC2E58A8EE。
步骤404,按照字符在更新后的密文中的位置由前到后的顺序,从更新后的密文中的前预设个数的字符串中选取第一目标位置上的字符进行拼接得到第三字符串。
在本实施例中,上述执行主体可以按照字符在步骤403中得到的更新后的密文中的位置由前到后的顺序,从上述更新后的密文中的前预设个数的字符串中选取第一目标位置上的字符进行拼接得到第三字符串。在这里,上述预设个数可以为上述更新后的密文的总个数与2的比值。上述第一目标位置可以为字符对应的索引为偶数的位置。作为示例,若更新后的密文为5DDC2E58A8EE,则上述预设个数为6,上述执行主体可以按照由前到后的顺序,从5DDC2E中选取出索引为偶数的位置上的字符,即选取出5、D、2,对选取出的字符进行拼接所得到的第三字符串为5D2。
在本实施例中,上述执行主体可以预先对上述更新后的密文中的每个字符设置索引。在对上述更新后的密文进行遍历的过程中可以为上述更新后的密文中的各个字符设置索引,例如,若上述更新后的密文的长度为64,可以将所访问的第一个字符的索引设置为0,将所访问的第二个字符的索引设置为1,以此类推,将所访问的最后一个字符的索引设置为63。
步骤405,按照字符在更新后的密文中的位置由后到前的顺序,从更新后的密文中的后预设个数的字符串中选取第二目标位置上的字符进行拼接得到第四字符串。
在本实施例中,上述执行主体可以按照字符在步骤403中得到的更新后的密文中的位置由后到前的顺序,从上述更新后的密文中的后预设个数的字符串中选取第二目标位置上的字符进行拼接得到第四字符串。在这里,上述预设个数可以为上述更新后的密文的总个数与2的比值。上述第二目标位置可以为字符对应的索引为奇数的位置。作为示例,若更新后的密文为5DDC2E58A8EE,则上述预设个数为6,上述执行主体可以按照由后到前的顺序,从58A8EE中选取出索引为偶数的位置上的字符,即选取出E、8、8,对选取出的字符进行拼接所得到的第四字符串为E88。
步骤406,将第三字符串和第四字符串进行拼接得到目标密文。
在本实施例中,上述执行主体可以将在步骤404中得到的第三字符串和在步骤405中得到的第四字符串进行拼接得到目标密文。作为示例,若第三字符串为5D2,第四字符串为E88,则拼接所得到的目标密文为5D2 E88。
本申请的上述实施例提供的方法公开了一种目标密文的生成方式,通过这种复杂的生成方式可以进一步提高了数据的安全性,降低了密文被破解的风险。
进一步参考图5,作为对上述各图所示方法的实现,本申请提供了一种用于加密数据的装置的一个实施例,该装置实施例与图2所示的方法实施例相对应,该装置具体可以应用于各种电子设备中。
如图5所示,本实施例的用于加密数据的装置500包括:第一获取单元501、第二获取单元502、加密单元503和生成单元504。其中,第一获取单元501被配置成响应于接收到密文,获取与接收到的密文对应的明文;第二获取单元502被配置成获取目标密钥,其中,目标密钥是基于预设的密码表和预设的初始密钥所生成的;加密单元503被配置成利用预设的加密算法和目标密钥,对明文进行加密得到初始密文;生成单元504被配置成对初始密文执行预设第一操作,生成目标密文。
在本实施例中,用于加密数据的装置500的第一获取单元501、第二获取单元502、加密单元503和生成单元504的具体处理可以参考图2对应实施例中的步骤201、步骤202、步骤203和步骤204。
在本实施例的一些可选的实现方式中,上述目标密钥可以是通过如下步骤确定的:首先,可以对预设的密码表中的预设第一数目个密码值执行预设第二操作,生成初始字符串。作为示例,可以对预设的密码表中的预设第一数目个密码值中的每个密码值与预设数字进行异或操作得到异或结果,按照密码值在上述密码表中的位置对各个密码值对应的异或结果进行拼接得到初始字符串。之后,可以基于预设的初始密钥,对上述初始字符串中的字符进行替换,得到目标密钥。作为一种示例,可以基于预设的初始密钥,从上述初始字符串中选取字符,例如,可以将初始密钥划分成字符,将划分出的每个字符转换成十六进制数,在上述初始字符串中选取索引为上述转换成的十六进制数的位置上的字符;之后,可以将选取出的字符替换成预设第二字符(例如,A、F等)得到目标密钥。作为另一种示例,可以从上述初始字符串中选取预设位置(例如,索引为奇数的位置)上的字符;之后,可以将初始密钥划分成字符,将划分出的每个字符转换成十六进制数,求取各个十六进制数的平均数,再对平均数进行取整操作(例如,向上取整或者向下取整);而后,将选取出的字符替换成上述取整操作所得到的整数,将得到的字符串确定为目标密钥。
在本实施例的一些可选的实现方式中,上述目标密钥可以进一步通过如下步骤确定:可以遍历预设的密码表中的预设第一数目个密码值。遍历是指沿着某条搜索路线,依次对树(或图)中每个节点均做一次访问。在这里,可以按照密码值在上述密码表中的位置由前到后的顺序依次对上述密码表中的每个密码值进行一次访问。可以对当前遍历(访问)的密码值向右位移目标位数,得到第一数值。在这里,上述目标位数可以是基于当前遍历的密码值在上述密码表中的位置所确定的。基于当前遍历的密码值在上述密码表中的位置可以确定出当前遍历的密码值对应的索引,可以将当前遍历的密码值对应的索引除以4所得到的余数确定为上述目标位数。之后,可以截取上述第一数值的低预设第二数值位,将截取得到的数值转换成第一字符串。在这里,上述第二数值可以为4,即截取上述第一数值的低四位,再将截取到的低四位数值转换为字符串作为第一字符串。上述第一字符串可以由十六进制数组成。而后,可以按照对上述第一数目个密码值的遍历顺序,对各个密码值对应的第一字符串进行拼接,得到初始字符串。
在本实施例的一些可选的实现方式中,上述目标密钥还可以进一步通过如下步骤确定:上述执行主体可以基于所得到的初始字符串和预设的初始密钥,执行替换步骤。上述初始密钥通常为number(数字)类型,上述初始密钥的取值区间可以为0到0x7FFFFFFF。上述替换步骤可以包括子步骤3031、3032、3033、3034、3035、3036、3037和3038。其中:
步骤3031,截取初始密钥的低预设第三数值位,得到第四数值。
在这里,可以截取上述初始密钥的低预设第三数值位,得到第四数值。在这里,上述第三数值可以为8,即截取上述第三数值的低八位,得到第四数值。
步骤3032,将第四数值除以第一数目所得到的余数确定为目标数值。
在这里,可以将在步骤3031中得到的第四数值除以上述第一数目所得到的余数确定为目标数值。上述第一数目为上述密码表中的密码值的数目,也可以理解为上述密码表的长度。
步骤3033,基于目标数值,从密码表中确定出目标密码值。
在这里,可以基于目标数值,从上述密码表中确定出目标密码值。具体地,可以将上述密码表中索引为上述目标数值的密码值确定为目标密码值。
步骤3034,将目标密码值向右位移预设第五数值位,再截取低预设第六数值位,将截取得到的数值转换成第二字符串。
在这里,可以将上述目标密码值向右位移预设第五数值位,再截取低预设第六数值位,将截取得到的数值转换成第二字符串。在这里,上述第五数值可以为8,上述第六数值可以为4,即将上述目标密码值向右位移八位,再截取低四位,将截取得到的四位二进制数转换成十六进制数作为第二字符串。
步骤3035,基于目标数值,从初始字符串中选取出目标字符,将选取出的目标字符替换成第二字符串,得到更新后的字符串。
在这里,可以基于上述目标数值,从上述初始字符串中选取出目标字符,将选取出的目标字符替换成上述第二字符串,得到更新后的字符串。具体地,上述执行主体可以从上述初始字符串中选取出对应的索引为上述目标数值的字符作为目标字符。针对上述初始字符串中的每个字符,该字符对应的索引通常为该字符对应的密码值对应的索引。
步骤3036,将初始密钥向右位移预设第七数值位所得到的字符作为更新后的密钥。
在这里,可以将步骤3031中的初始密钥向右位移预设第七数值位所得到的字符作为更新后的密钥。在这里,上述第七数值可以为4,即将上述初始密钥向右位移四位所得到的字符作为更新后的密钥。
步骤3037,判断更新后的密钥是否大于预设第八数值。
在这里,可以判断在步骤3036中得到的更新后的密钥是否大于预设第八数值。在这里,上述第八数值可以为0,即判断上述更新后的密钥是否大于0。若判断出上述更新后的密钥不大于0(上述更新后的密钥等于0),则上述执行主体可以执行步骤3038。若判断出上述更新后的密钥大于0,则上述执行主体可以执行步骤3039。
步骤3038,响应于判断出更新后的密钥不大于第八数值,将更新后的字符串确定为目标密钥。
在这里,若在步骤3037中判断出上述更新后的密钥不大于0(上述更新后的密钥等于0),则可以将步骤3035中得到的更新后的字符串确定为目标密钥。
在本实施例的一些可选的实现方式中,若判断出上述更新后的密钥大于0,则可以将更新后的字符串作为初始字符串以及将更新后的密钥作为初始密钥继续执行上述替换步骤,即步骤3031-步骤3038,形成循环。
在本实施例的一些可选的实现方式中,上述生成单元504可以进一步被配置成通过如下方式对上述初始密文执行预设第一操作,生成目标密文:上述生成单元504可以首先对上述初始密文中的字符进行处理,得到更新后的密文。作为示例,上述生成单元504可以从上述初始密文中按照由前到后的顺序或者由后到前的顺序选取索引为偶数的位置上的字符,将选取出的字符替换成预设第三字符,得到更新后的密文。上述生成单元504也可以从上述初始密文中按照由前到后的顺序或者由后到前的顺序选取索引为奇数的位置上的字符,将选取出的字符替换成预设第四字符,得到更新后的密文。而后,可以从上述更新后的密文中选取预设第二数目个字符组成字符串作为目标密文。上述预设第二数目可以为上述更新后的密文的长度的预设数值,例如,二分之一,四分之一等。作为示例,上述生成单元504可以从上述更新后的密文中按照由前到后的顺序选取上述第二数目个字符组成字符串作为目标密文。上述生成单元504也可以从上述更新后的密文中按照由后到前的顺序选取上述第二数目个字符组成字符串作为目标密文。
在本实施例的一些可选的实现方式中,上述生成单元504可以进一步被配置成通过如下方式对初始密文中的字符进行处理,得到更新后的密文:上述生成单元504可以对上述初始密文进行划分得到字符串集合。通常来说,上述字符串集合中的字符串通常具有相同的长度。具体地,上述生成单元504可以遍历上述初始密文,按照遍历顺序对上述初始密文进行划分,例如,可以每遍历一个字符执行一次划分操作,此时,字符串集合中的字符串的长度为1;也可以每遍历两个字符执行一次划分操作,此时,字符串集合中的字符串的长度为2。针对得到的字符串集合中的每个字符串,上述生成单元504可以将该字符串转换成数字,将得到的数字与预设数字进行异或操作所得到的数字转换成字符串作为处理后的字符串。具体地,上述生成单元504可以将该字符串转换成十六进制数,将得到的十六进制数与预设数字进行异或操作。需要说明的是,上述预设数字的位数通常与所得到的十六进制数的位数相同。若所得到的十六进制数为两位,则上述预设数字的位数也为两位,例如,可以为0xFF;若所得到的十六进制数为一位,则上述预设数字的位数也为一位,例如,可以为0xF。上述生成单元504可以按照上述字符串集合中的每个字符串在上述初始密文中的位置由前到后的顺序对各个字符串对应的处理后的字符串进行拼接,得到更新后的密文。
在本实施例的一些可选的实现方式中,上述生成单元504可以进一步被配置成通过如下方式从更新后的密文中选取预设第二数目个字符组成字符串作为目标密文:上述生成单元504可以按照字符在得到的更新后的密文中的位置由前到后的顺序,从上述更新后的密文中的前预设个数的字符串中选取第一目标位置上的字符进行拼接得到第三字符串。在这里,上述预设个数可以为上述更新后的密文的总个数与2的比值。上述第一目标位置可以为字符对应的索引为偶数的位置。上述生成单元504可以按照字符在得到的更新后的密文中的位置由后到前的顺序,从上述更新后的密文中的后预设个数的字符串中选取第二目标位置上的字符进行拼接得到第四字符串。在这里,上述预设个数可以为上述更新后的密文的总个数与2的比值。上述第二目标位置可以为字符对应的索引为奇数的位置。最后,上述生成单元504可以将第三字符串和第四字符串进行拼接得到目标密文。
在本实施例的一些可选的实现方式中,上述用于加密数据的装置500还可以包括输出单元(图中未示出)。在得到初始密文之后,上述输出单元还可以确定上述初始密文是否为空以及确定上述初始密文是否为零。若确定出上述初始密文为空或者确定出上述初始密文为零,则上述输出单元可以输出错误信息。上述错误信息可以包括用于表征上述初始密文为空的第一错误信息和用于表征上述初始密文为零的第二错误信息。
下面参考图6,其示出了适于用来实现本公开的实施例的电子设备(例如图1中的服务器)600的结构示意图。图6示出的服务器仅仅是一个示例,不应对本公开的实施例的功能和使用范围带来任何限制。
如图6所示,电子设备600可以包括处理装置(例如中央处理器、图形处理器等)601,其可以根据存储在只读存储器(ROM)602中的程序或者从存储装置608加载到随机访问存储器(RAM)603中的程序而执行各种适当的动作和处理。在RAM 603中,还存储有电子设备600操作所需的各种程序和数据。处理装置601、ROM 602以及RAM 603通过总线604彼此相连。输入/输出(I/O)接口605也连接至总线604。
通常,以下装置可以连接至I/O接口605:包括例如触摸屏、触摸板、键盘、鼠标、摄像头、麦克风、加速度计、陀螺仪等的输入装置606;包括例如液晶显示器(LCD)、扬声器、振动器等的输出装置607;包括例如磁带、硬盘等的存储装置608;以及通信装置609。通信装置609可以允许电子设备600与其他设备进行无线或有线通信以交换数据。虽然图6示出了具有各种装置的电子设备600,但是应理解的是,并不要求实施或具备所有示出的装置。可以替代地实施或具备更多或更少的装置。图6中示出的每个方框可以代表一个装置,也可以根据需要代表多个装置。
特别地,根据本公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信装置609从网络上被下载和安装,或者从存储装置608被安装,或者从ROM 602被安装。在该计算机程序被处理装置601执行时,执行本公开的实施例的方法中限定的上述功能。需要说明的是,本公开的实施例所述的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开的实施例中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本公开的实施例中,计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读信号介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:电线、光缆、RF(射频)等等,或者上述的任意合适的组合。
上述计算机可读介质可以是上述电子设备中所包含的;也可以是单独存在,而未装配入该电子设备中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被该电子设备执行时,使得该电子设备:响应于接收到密文,获取与接收到的密文对应的明文;获取目标密钥,其中,目标密钥是基于预设的密码表和预设的初始密钥所生成的;利用预设的加密算法和目标密钥,对明文进行加密得到初始密文;对初始密文执行预设第一操作,生成目标密文。
可以以一种或多种程序设计语言或其组合来编写用于执行本公开的实施例的操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)——连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,该模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本公开的实施例中所涉及到的单元可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的单元也可以设置在处理器中,例如,可以描述为:一种处理器包括第一获取单元、第二获取单元、加密单元和生成单元。其中,这些单元的名称在某种情况下并不构成对该单元本身的限定,例如,第二获取单元还可以被描述为“获取目标密钥的单元”。
以上描述仅为本公开的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本公开的实施例中所涉及的发明范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离上述发明构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本公开的实施例中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。