本发明涉及通信技术领域,尤其涉及一种信息加、解密的方法及装置。
背景技术:
目前,人们对于其隐私数据越来越注重保密,很多人通过加密的形式保存自己的隐私数据。
现有技术中加密方法有很多,但是都是基于文字类的加密解密。但是,再复杂的文字也有被破译的时刻,数据的安全性依然得不到保障。
技术实现要素:
针对现有技术存在的问题,本发明实施例提供了一种信息加、解密的方法及装置,用于解决现有技术中对文字信息进行加密后,还是以文字的形成进行传输,导致信息容易被破解,数据安全性得不到保证的技术问题。
本发明提供一种信息加密的方法,所述方法包括:
获取待加密信息的明文信息;
将所述明文信息转换为字符编码;
将所字符编码转换为相应的数字信息;
根据第一转换规则将所述数字信息转换为至少一组颜色值;
通过所述至少一组颜色值生成图像,所述图像即为对所述明文信息进行加密的加密结果。
上述方案中,根据第一转换规则将所述数字信息转换为至少一组颜色值,包括:
确定每组数字信息的数值;
确定每种颜色对应的最大阶层,根据相应的数值与R颜色对应的最大阶层确定所述R颜色的颜色值,并获取第一剩余值;
根据所述第一剩余值与G颜色对应最大的阶层确定所述G颜色的颜色值,并获取第二剩余值;
基于所述第二剩余值确定所述B颜色的颜色值;
将所述R颜色的颜色值、G颜色的颜色值及所述B颜色的颜色值进行组合,获取至少一组(R,G,B)颜色值;其中,所述R颜色为红色,所述G颜色为绿色,所述B颜色为蓝色,
上述方案中,当通过所述至少一组颜色值生成图像之前,所述方法还包括:
接收混淆数值;
根据所述混淆数值随机生成相应数量的混淆色块;
基于混淆算法确定所述混淆色块在所述图像中的写入位置。
上述方案中,通过所述至少一组颜色值生成图像,包括:
确定写入所述至少一组颜色值的第一基准点;
以所述第一基准点为起始位置,基于所述混淆色块的数量及所述混淆色块在所述图像中的写入位置,将所述至少一组颜色值与所述混淆色块的颜色值依次写入所述图像中。
上述方案中,基于混淆算法确定所述混淆色块在所述图像中的写入位置包括:
基于所述混淆数值的数量确定每组所述写入位置的数量;
确定所述写入位置的第二基准点;
以所述第二基准点为起始位置,每组写入位置依次分布于两组颜色值所对应的颜色块之间。
本发明提供一种信息解密的方法,所述方法包括:
从图像中读取至少一组颜色值,所述图像为对明文信息进行加密的加密结果;
根据第二转换规则将所述至少一组颜色值转换为数字信息;
将所述数字信息转换为字符编码;
将所述字符编码转换所述明文信息。
上述方案中,根据第二转换规则将相所述至少一组颜色值转换为数字信息,包括:
确定每种颜色对应的最大阶层,根据公式A=(B*C+G)*C+R确定所述数字信息的数值A;其中,所述每种颜色对应的最大阶层相同,所述R为红色,所述G为绿色,所述B为蓝色,所述C为所述每种颜色对应的最大阶层。
上述方案中,当所述图像中混淆有混淆色块时,从所述图像中读取至少一组颜色值包括:
接收混淆数值,根据所述混淆数值确定的随机生成的混淆色块的数量;
基于混淆算法确定所述混淆色块在所述图像中的写入位置;
确定写入所述颜色值的第一基准点;
以所述第一基准点为起始位置遍历所述图像,在遍历过程中,基于所述混淆色块的数量及在所述混淆色块在所述图像中的写入位置跳过所述混淆色块,读取所述至少一组颜色值。
本发明还提供一种信息加密的装置,所述装置包括:
获取单元,用于获取待加密信息的明文信息;
第一转换单元,用于将所述明文信息转换为字符编码;
第二转换单元,用于将所述字符编码转换为相应的数字信息;
第三转换单元,用于根据第一转换规则将所述数字信息转换为至少一组颜色值;
生成单元,用于通过所述至少一组颜色值生成图像,所述图像即为对所述明文信息进行加密的加密结果。
本发明还提供一种信息解密的装置,所述装置包括:
读取单元,用于从图像中读取至少一组颜色值,所述图像为对明文信息进行加密的加密结果;
第四转换单元,用于根据第二转换规则将所述至少一组颜色值转换为数字信息;
第五转换单元,用于将所述数字信息转换为字符编码;
第六转换单元,用于将所述字符编码转换为所述的明文信息。
本发明提供了一种信息加、解密的方法及装置,所述加密方法包括:获取待加密信息的明文信息;将所述明文信息统一转换为字符编码;将所字符编码转换为相应的数字信息;根据第一转换规则将所述数字信息转换为至少一组颜色值;通过所述至少一组颜色值生成图像,所述图像即为对所述明文信息进行加密的加密结果;这样,就将文字信息转换为图像实现对文字信息的加密,在传输过程中增强了信息的隐蔽性,从而避免破解者反编译破解,提高了数据的安全性。
附图说明
图1为本发明实施例一提供的信息加密的方法流程示意图;
图2为本发明实施例二提供的信息解密的方法流程示意图;
图3为本发明实施例一提供的信息加密的装置结构示意图;
图4为本发明实施例二提供的信息解密的装置结构示意图。
具体实施方式
为了在加密信息时,增强信息的隐蔽性,避免信息容易被破解,提高数据的安全性,本发明提供了一种信息加、解密的方法及装置,所述加密方法包括:获取待加密信息的明文信息;将所述明文信息统一转换为字符编码;将所字符编码转换为相应的数字信息;根据第一转换规则将所述数字信息转换为至少一组颜色值;通过所述至少一组颜色值生成图像,所述图像即为对所述明文信息进行加密的加密结果。
下面通过附图及具体实施例对本发明的技术方案做进一步的详细说明。
实施例一
本实施例提供一种信息加密的方法,如图1所示,所述加密方法包括:
S101,获取待加密信息的明文信息。
本步骤中,在对信息加密之前,首先需要获取待加密信息的明文信,所述待加密信息可以是通过用户输入获取,也可以是系统直接给予;所述待加密信息包括文字信息。
S102,将所述明文信息转换为字符编码。
本步骤中,获取到待加密信息的明文信息后,由于明文信息有各种编码的信息,有可能会有中文,英文,其他文字,为了将各国文字都可以转为统一的编码格式,防止出现乱码,或者识别不到的情况,将所述明文信息统一转换为字符编码。
本实施例中,具体是将所述明文信息转为base64编码,base64编码要求把3个8位字节(3*8=24)转化为4个6位的字节(4*6=24),之后在6位的前面补两个0,形成8位一个字节的形式。如果剩下的字符不足3个字节,则用0填充,输出字符使用'=',因此编码后输出的文本末尾可能会出现1或2个'='。
所以,将明文信息转换为字符编码后,将会出现英文字母,数字,+,/,=这些字符的混合字符串编码。
S103,将所字符编码转换为相应的数字信息。
将所述明文信息统一转换为字符编码后,因本实施例中是需要将字符编码转换为颜色值来填充图像的,因此本步骤中还需将字符编码转换为相应的数字信息,所述数字信息是指具体的数值。
本发明中是通过将base64编码转为unicode编码,因unicode编码格式的字符串是一个设定了统一并且唯一的二进制编码,因此unicode编码是一段数字。
这里,由于base64编码是由英文字母,数字和+,/,=组成的,因此不存在将其转换为unicode后会超出计算机二进制最大数值65535的情况,因此,所有转为unicode的编码都将是小于65535的。
S104,根据第一转换规则将所述数字信息转换为相至少一组颜色值。
本步骤中,将字符编码转换为数字信息后,每个字符编码都会对应一组数字信息,根据第一转换规则将每组数字信息转换为至少一组颜色值。
因为在Android设备上,RGB颜色通常是由红(R)、绿(G)、蓝(B)三种颜色组成,每种颜色是有255种阶层。因此,在本发明中,可以将数字信息按照RGB三种颜色分别表示出来;本实施例中,是通过将数字信息转换为(R,G,B)颜色值来实现的。
具体地,以其中一组数字信息来说,首先确定所述数字信息的数值;确定每种颜色对应的最大阶层,根据所述数值与R颜色对应的最大阶层确定所述R颜色的颜色值,并获取第一剩余值;根据所述第一剩余数值与G颜色对应最大的阶层确定所述G颜色的颜色值,并获取第二剩余值;基于所述第二剩余值确定所述B颜色的颜色值。将所述R颜色的颜色值、G颜色的颜色值及所述B颜色的颜色值进行组合,获取(R,G,B)颜色值。其他组数字信息可以按照同样的方法获取相应的(R,G,B)颜色值。
本实施中每种颜色对应的最大阶层为255,那么就可以以255为进制,与每组数字信息的数值进行商除,确定每组数字信息对应的(R,G,B)颜色值。
比如,当一组数字信息的数值为1000时,实现利用1000除以255得到的第一余数为235,那么R颜色的颜色值就为235;商为3,那么G颜色的颜色值为3;B颜色的颜色值为0;该组的(R,G,B)颜色块的颜色值即为(235,3,0)。
依此为例,可以确定出每组数字信息的(R,G,B)颜色值。
S105,通过所述至少一组颜色值生成图像。
本步骤中,当所有的数字信息都转换为相应的(R,G,B)颜色值后,基于图像的尺寸将相应(R,G,B)颜色值写入所述图像中。
本实施例中,将一个(R,G,B)颜色值对应的颜色块以一个像素来表示,每一个(R,G,B)颜色块会保存在图像中的一个像素中。
具体地,首先确定图像的尺寸,本实施例中只需确定图像的宽度即可,图像的长度是根据所有数字信息的数值来确定的,所述图像的宽可以包括32,64,128,256,512,1024,可以根据自己的喜好来确定需要使用哪一种图像的宽来绘制,如果数值一样,选择的图像越宽,图像的长就越小,反之选择的图像宽度越窄,其生成图像的长就越大。
当确定出图像的宽后,根据公式(1)确定出图像的长:
L1=A/W (1)
在公式(1)中,所述L1为图像的长,所述A为数字信息的数值;所述W为图像的宽。
当图像的尺寸确定好之后,确定写入的第一基准点,从所述第一基准点为起始位置,利用Android—ColorMatrix将相应的(R,G,B)颜色值逐行写入所述图像中。
本实施例中是以所述图像的左上角为第一基准点(0,0)的,逐行将相应的(R,G,B)颜色值写入图像中的。
写入代码具体为:mBitmap.compress(Bitmap.CompressFormat.PNG,100,fOut);
比如,左上角为第一基准点(0,0),每个像素对应的宽高坐标为(x,y),从原点(0,0)开始写,写到第一行的末端,开始换写第二行,直至将图像写满。
写入完成后,将生成的图像保存到文件中,至此,由明文信息来生成信息图像的工作已经完成。
当然,如果想让生成的图像更为复杂,更难破译,还可以利用混淆算法设置混淆色块,将所述混淆色块写入图像中。
具体地,基于图像的尺寸将(R,G,B)颜色块的颜色值写入所述图像中之前,接收混淆数值,根据所述混淆数值随机生成相应数量的混淆色块;基于混淆算法确定所述混淆色块在所述图像中的写入位置。比如,当混淆数值为1时,则随机生成一个混淆色块。当混淆数值为2时,则随机生成两个混淆色块。
那么,这时通过所述至少一组颜色值生成图像,具体包括:
确定写入所述至少一组颜色值的第一基准点;
以所述第一基准点为起始位置,基于所述混淆色块的数量及所述混淆色块在所述图像中的写入位置,将所述至少一组颜色值与所述混淆色块的颜色值依次写入所述图像中。
这里,基于混淆算法确定所述混淆色块在所述图像中的写入位置包括:基于所述混淆数值的数量确定每组所述写入位置的数量;确定所述写入位置的第二基准点;以所述第二基准点为起始位置,每组写入位置依次分布于两组颜色值所对应的颜色块之间。
其中,所述写入位置的第二基准点一般为第一个(R,G,B)颜色值对应的颜色块与第二个(R,G,B)颜色值对应的颜色块之间的位置;当然,第二基准点也可以设置为其他位置点,比如第二个(R,G,B)颜色块和第三个(R,G,B)颜色块之间的位置等。
比如,写入位置的第二基准点为第一个(R,G,B)颜色值对应的颜色块与第二个颜色值对应的(R,G,B)颜色块之间,当混淆数值的数量为2个时,写入位置分别为:第一个(R,G,B)颜色值对应的颜色块与第二个颜色值对应的(R,G,B)颜色块之间、第二个颜色值对应的(R,G,B)颜色块与第三个颜色值对应的(R,G,B)颜色块之间的位置。
具体地,当混淆色块的写入位置及数量都确定之后,首先确定所述(R,G,B)颜色值对应的颜色块与所述混淆色块的数字信息的实际数值;这里,可以根据公式(2)计算所述实际数值:
Q=A*(x+1) (2)
公式(2)中,所述Q为实际数值,所述x为混淆数值。
当确定好实际数值后,确定图像的尺寸,同样,只需确定图像的宽度即可,图像的长度是根据所有数字信息的数值来确定的,所述图像的宽可以包括32,64,128,256,512,1024,可以根据自己的喜好来确定需要使用哪一种图像的宽来绘制,如果数值一样,选择的图像越宽,图像的长就越小,反之选择的图像宽度越窄,其生成图像的长就越大。
当确定出图像的宽后,根据公式(3)确定出图像的长:
L2=Q/W (3)
在公式(1)中,所述L2为图像的长,所述Q为实际数值;所述W为图像的宽。这里,当公式(3)有余数时,则将余数的(R,G,B)颜色值设置为(255,255,255),用以作为填充占位的内容。
当图像的尺寸确定好之后,同样确定写入的第一基准点,以所述第一基准点为起始位置,利用Android—ColorMatrix将相应的(R,G,B)颜色值及混淆色块的颜色值逐行依次写入所述图像中。这里,同样是以所述图像的左上角为第一基准点(0,0)的。
写入代码具体为:mBitmap.compress(Bitmap.CompressFormat.PNG,100,fOut);
比如,将写入位置的第二基准点为第一个(R,G,B)颜色值对应的颜色块与第二个(R,G,B)颜色值对应的颜色块之间,当混淆数值的数量为2个时,写入位置分别为:第一个(R,G,B)颜色值对应的颜色块与第二个(R,G,B)颜色值对应的颜色块之间、第二个(R,G,B)颜色值对应的颜色块与第三个(R,G,B)颜色值对应的颜色块之间的位置。
这两个混淆数值均为1,可以以(1,1)来表示,以左上角为第一基准点(0,0),每个像素对应的宽高坐标为(x,y),从第一基准点(0,0)开始写,将第一个(R,G,B)颜色值写入之后,接着写入一个混淆色块的颜色值,接着写入第二个(R,G,B)颜色值,将第二个(R,G,B的颜色值写完之后,接着再写一个混淆色块的颜色值,依次类推,写到第一行的末端,开始换写第二行,直至将图像写满。
写入完成后,将生成的图像保存到文件中,至此,混有混淆色块的图像写入工作完成。
本实施例中,混淆数值越大,生成的图像也就越复杂。
实施例二
相应于实施例一,本实施例还提供一种信息解密的方法,如图2所示,所述方法包括:
S201,从图像中读取至少一组颜色值,所述图像为对明文信息进行加密的加密结果。
本步骤中,从图像中读取至少一组颜色值,包括:接收混淆数值,根据所述混淆数值确定的随机生成的混淆色块的数量;
基于混淆算法确定所述混淆色块在所述图像中的写入位置;
确定写入所述颜色值的第一基准点;
以所述第一基准点为起始位置遍历所述图像,在遍历过程中,基于所述混淆色块的数量及在所述混淆色块在所述图像中的写入位置跳过所述混淆色块,读取所述至少一组颜色值。
具体地,获取图像的长度、宽度和第一基准点,基于所述图像的长度和宽度从第一基准点(0,0)为起始位置开始逐行遍历所述图像,读取各个(R,G,B)颜色块的颜色值。
如果图像中设置有混淆色块,会根据接收到的混淆数值,根据所述混淆数值确定的混淆色块的数量;基于混淆算法确定所述混淆色块在所述图像中的写入位置;遍历所述图像时,基于所述混淆色块的数量及所述图像中的写入位置跳过所述混淆色块。
这里,读取各个(R,G,B)颜色值的代码如下:
int color=bitmap.getPixel(x,y);//获取当前点的颜色信息
int r=Color.red(color);//分析出颜色中的R的值
int g=Color.green(color);//分析出颜色中的G的值
int b=Color.blue(color);//分析出颜色中的B的值
用以上代码可以得到每个(R,G,B)颜色值,(x,y)是之前得到的每个(R,G,B)所述像素的宽高坐标,读取到各个(R,G,B)颜色值后,将各个(R,G,B)颜色值存入已经初始化的列表中,并进行之后的转码。如果在获取颜色值的过程中,获取到了R、G、B的颜色值都是255时,则代码该位是占位符,排除掉该值。
如果图像中没有混淆色块,则按照上述方法直接读取即可获得相应的R,G,B)颜色值。
S202,根据第二转换规则将所述至少一组颜色值转换为数字信息。
本步骤中,当将各个(R,G,B)颜色值都读取到之后,根据第二转换规则将相应的(R,G,B)颜色值转换为数字信息。
具体地,确定每种颜色对应的最大阶层,根据公式(4)计算出所述数字信息的数值A:
A=(B*C+G)*C+R (4)
本实施例中,所述每种颜色对应的最大阶层相同,所述C为所述每种颜色对应的最大阶层,RGB颜色通常是由红(R)、绿(G)、蓝(B)三种颜色组成,每种颜色是有255种阶层,也就是说公式(3)中C的值为255。当将每个(R,G,B)颜色值的数字信息的数值确定出之后,将各组数字信息进行拼接形成一完整的数字信息,将所述数字信息存储至列表集合中。
本实施例中,因unicode编码格式的字符串是一个设定了统一并且唯一的二进制编码,因此unicode编码是一段数字。所以本实施例是将颜色值转换为unicode编码实现颜色值到数字信息的转换。
S203,将所述数字信息转换为字符编码。
本步骤中,获取到数字信息后,还需要将数字信息转换为字符编码,具体是将unicode编码转换为base64的编码:
unicode编码转换成base64的编码,使用的方法如下:
使用上述代码,返回的数据就是Base64的字符编码数据了。
S204,将所述字符编码转换为所述明文信息。
本步骤中,在获取到字符编码后,利用代码:
Base64.encodeToString(str.getBytes(),Base64.DEFAULT);
就可以将Base64的字符编码转换为明文信息了。
这样,就完成了解密过程。
实施例三
相应于实施例一,本实施例提供一种信息加密的装置,如图3所示,所述装置包括:获取单元31、第一转换单元32、第二转换单元33、第三转换单元34及生成单元35;其中,
所述获取单元31用于获取待加密信息的明文信息。具体地,在对信息加密之前,首先需要获取待加密信息的明文信,所述待加密信息可以是通过用户输入获取,也可以是系统直接给予;所述待加密信息包括文字信息。
当所述获取单元31获取到明文信息后,所述第一转换单元32用于将所述明文信息统一转换为字符编码;具体地,由于明文信息有各种编码的信息,有可能会有中文,英文,其他文字,为了将各国文字都可以转为统一的编码格式,防止出现乱码,或者识别不到的情况,将所述明文信息统一转换为字符编码。
本实施例中,具体是第一转换单元32将所述明文信息转为base64编码,base64编码要求把3个8位字节(3*8=24)转化为4个6位的字节(4*6=24),之后在6位的前面补两个0,形成8位一个字节的形式。如果剩下的字符不足3个字节,则用0填充,输出字符使用'=',因此编码后输出的文本末尾可能会出现1或2个'='。
所以,将明文信息转换为字符编码后,将会出现英文字母,数字,+,/,=这些字符的混合字符串编码。
当所述第一转换单元32将明文信息统一转换为字符编码后,所述第二转换单元33用于将所述字符编码转换为相应的数字信息;具体地,因本实施例中是需要将字符编码转换为颜色值来填充图像的,因此所述第二转换单元33还需将字符编码转换为相应的数字信息,所述数字信息是指具体的数值。
本发明中是通过将base64编码转为unicode编码,因unicode编码格式的字符串是一个设定了统一并且唯一的二进制编码,因此unicode编码是一段数字。
这里,由于base64编码是由英文字母,数字和+,/,=组成的,因此不存在将其转换为unicode后会超出计算机二进制最大数值65535的情况,因此,所有转为unicode的编码都将是小于65535的。
当所述第二转换单元33将所述字符编码转换为相应的数字信息后,第三转换单元34用于根据第一转换规则将每数量字信息转换为相应的(R,G,B)颜色块。
具体地,在Android设备上,RGB颜色通常是由红(R)、绿(G)、蓝(B)三种颜色组成,每种颜色是有255种阶层。因此,在本发明中,可以将数字信息按照RGB三种颜色分别表示出来。
具体地,第三转换单元34确定所述数字信息的数值;第三转换单元34确定每种颜色对应的最大阶层,根据所述数值与R颜色对应的最大阶层确定所述R颜色的颜色值,并获取第一剩余数值;根据所述第一剩余数值与G颜色对应最大的阶层确定所述G颜色的颜色值,并获取第二剩余数值;基于所述第二剩余数值确定所述B颜色的颜色值。将所述R颜色的颜色值、G颜色的颜色值及所述B颜色的颜色值进行组合,获取(R,G,B)颜色值。其他组数字信息可以按照同样的方法获取相应的(R,G,B)颜色值。
本实施中每种颜色对应的最大阶层为255,那么就可以以255为进制,与每组数字信息的数值进行商除,确定每组数字信息对应的(R,G,B)颜色值。
比如,当一组数字信息的数值为1000时,实现利用1000除以255得到的第一余数为235,那么R颜色的颜色值就为235;商为3,那么G颜色的颜色值为3;B颜色的颜色值为0;该组的(R,G,B)颜色值即为(235,3,0)。
当所述第三转换单元34根据第一转换规则将每组数字信息转换为相应的(R,G,B)颜色值后,生成单元35用于通过所述至少一组颜色值生成图像。具体地,本实施例中,将一个(R,G,B)颜色块以一个像素来表示,每一个(R,G,B)颜色块会保存在图像中的一个像素中。
具体地,生成单元35首先确定图像的尺寸,本实施例中只需确定图像的宽度即可,图像的长度是根据所有数字信息的数值来确定的,所述图像的宽可以包括32,64,128,256,512,1024,可以根据自己的喜好来确定需要使用哪一种图像的宽来绘制,如果数值一样,选择的图像越宽,图像的长就越小,反之选择的图像宽度越窄,其生成图像的长就越大。
当确定出图像的宽后,生成单元35根据公式(1)确定出图像的长:
L1=A/W (1)
在公式(1)中,所述L1为图像的长,所述A为数字信息的数值;所述W为图像的宽。
当图像的尺寸确定好之后,确定写入的第一基准点,从所述第一基准点为起始位置,利用Android—ColorMatrix将相应的(R,G,B)颜色值逐行写入所述图像中。
本实施例中是以所述图像的左上角为第一基准点(0,0)的,逐行将相应的(R,G,B)颜色值写入图像中的。
写入代码具体为:mBitmap.compress(Bitmap.CompressFormat.PNG,100,fOut);
比如,左上角为第一基准点(0,0),每个像素对应的宽高坐标为(x,y),从原点(0,0)开始写,写到第一行的末端,开始换写第二行,直至将图像写满。
写入完成后,将生成的图像保存到文件中,至此,由明文信息来生成信息图像的工作已经完成。
当然,如果想让生成的图像更为复杂,更难破译,还可以利用混淆算法设置混淆色块,将所述混淆色块写入图像中。
具体地,基于图像的尺寸将(R,G,B)颜色块的颜色值写入所述图像中之前,接收混淆数值,根据所述混淆数值随机生成相应数量的混淆色块;基于混淆算法确定所述混淆色块在所述图像中的写入位置。比如,当混淆数值为1时,则随机生成一个混淆色块。当混淆数值为2时,则随机生成两个混淆色块。
那么,这时通过所述至少一组颜色值生成图像,具体包括:
确定写入所述至少一组颜色值的第一基准点;
以所述第一基准点为起始位置,基于所述混淆色块的数量及所述混淆色块在所述图像中的写入位置,将所述至少一组颜色值与所述混淆色块的颜色值依次写入所述图像中。
这里,基于混淆算法确定所述混淆色块在所述图像中的写入位置包括:基于所述混淆数值的数量确定每组所述写入位置的数量;确定所述写入位置的第二基准点;以所述第二基准点为起始位置,每组写入位置依次分布于两组颜色值所对应的颜色块之间。
其中,所述写入位置的第二基准点一般为第一个(R,G,B)颜色值对应的颜色块与第二个(R,G,B)颜色值对应的颜色块之间的位置;当然,第二基准点也可以设置为其他位置点,比如第二个(R,G,B)颜色块和第三个(R,G,B)颜色块之间的位置等。
比如,写入位置的第二基准点为第一个(R,G,B)颜色值对应的颜色块与第二个颜色值对应的(R,G,B)颜色块之间,当混淆数值的数量为2个时,写入位置分别为:第一个(R,G,B)颜色值对应的颜色块与第二个颜色值对应的(R,G,B)颜色块之间、第二个颜色值对应的(R,G,B)颜色块与第三个颜色值对应的(R,G,B)颜色块之间的位置。
具体地,当混淆色块的写入位置及数量都确定之后,首先确定所述(R,G,B)颜色值对应的颜色块与所述混淆色块的数字信息的实际数值;这里,可以根据公式(2)计算所述实际数值:
Q=A*(x+1) (2)
公式(2)中,所述Q为实际数值,所述x为混淆数值。
当确定好实际数值后,确定图像的尺寸,同样,只需确定图像的宽度即可,图像的长度是根据所有数字信息的数值来确定的,所述图像的宽可以包括32,64,128,256,512,1024,可以根据自己的喜好来确定需要使用哪一种图像的宽来绘制,如果数值一样,选择的图像越宽,图像的长就越小,反之选择的图像宽度越窄,其生成图像的长就越大。
当确定出图像的宽后,根据公式(3)确定出图像的长:
L2=Q/W (3)
在公式(1)中,所述L2为图像的长,所述Q为实际数值;所述W为图像的宽。这里,当公式(3)有余数时,则将余数的(R,G,B)颜色值设置为(255,255,255),用以作为填充占位的内容。
当图像的尺寸确定好之后,同样确定写入的第一基准点,以所述第一基准点为起始位置,利用Android—ColorMatrix将相应的(R,G,B)颜色值及混淆色块的颜色值逐行依次写入所述图像中。这里,同样是以所述图像的左上角为第一基准点(0,0)的。
写入代码具体为:mBitmap.compress(Bitmap.CompressFormat.PNG,100,fOut);
比如,将写入位置的第二基准点为第一个(R,G,B)颜色值对应的颜色块与第二个(R,G,B)颜色值对应的颜色块之间,当混淆数值的数量为2个时,写入位置分别为:第一个(R,G,B)颜色值对应的颜色块与第二个(R,G,B)颜色值对应的颜色块之间、第二个(R,G,B)颜色值对应的颜色块与第三个(R,G,B)颜色值对应的颜色块之间的位置。
这两个混淆数值均为1,可以以(1,1)来表示,以左上角为第一基准点(0,0),每个像素对应的宽高坐标为(x,y),从第一基准点(0,0)开始写,将第一个(R,G,B)颜色值写入之后,接着写入一个混淆色块的颜色值,接着写入第二个(R,G,B)颜色值,将第二个(R,G,B的颜色值写完之后,接着再写一个混淆色块的颜色值,依次类推,写到第一行的末端,开始换写第二行,直至将图像写满。
写入完成后,将生成的图像保存到文件中,至此,混有混淆色块的图像写入工作完成。
实施例四
相应于实施例二,本实施例还提供一种信息解密的装置,如图4所示,所述装置包括:读取单元41、第四转换单元42、第五转换单元43及第六转换单元44;其中,
所述读取单元41用于从图像中读取至少一组颜色值,所述图像为对明文信息进行加密的加密结果。
所述读取单元41从图像中读取至少一组颜色值,包括:所述读取单元41接收混淆数值,根据所述混淆数值确定的随机生成的混淆色块的数量;
基于混淆算法确定所述混淆色块在所述图像中的写入位置;
确定写入所述颜色值的第一基准点;
以所述第一基准点为起始位置遍历所述图像,在遍历过程中,基于所述混淆色块的数量及在所述混淆色块在所述图像中的写入位置跳过所述混淆色块,读取所述至少一组颜色值。
具体地,所述读取单元41获取图像的长度、宽度和第一基准点,基于所述图像的长度和宽度从第一基准点(0,0)为起始位置开始逐行遍历所述图像,读取各个(R,G,B)颜色块的颜色值。
如果图像中设置有混淆色块,会根据接收到的混淆数值,根据所述混淆数值确定的混淆色块的数量;基于混淆算法确定所述混淆色块在所述图像中的写入位置;遍历所述图像时,基于所述混淆色块的数量及所述图像中的写入位置跳过所述混淆色块。
这里,读取各个(R,G,B)颜色值的代码如下:
int color=bitmap.getPixel(x,y);//获取当前点的颜色信息
int r=Color.red(color);//分析出颜色中的R的值
int g=Color.green(color);//分析出颜色中的G的值
int b=Color.blue(color);//分析出颜色中的B的值
用以上代码可以得到每个(R,G,B)颜色值,(x,y)是之前得到的每个(R,G,B)所述像素的宽高坐标,读取到各个(R,G,B)颜色值后,将各个(R,G,B)颜色值存入已经初始化的列表中,并进行之后的转码。如果在获取颜色值的过程中,获取到了R、G、B的颜色值都是255时,则代码该位是占位符,排除掉该值。
如果图像中没有混淆色块,则按照上述方法直接读取即可获得相应的R,G,B)颜色值。
当所述相应的(R,G,B)颜色块的颜色值获取到之后,第四转换单元42用于根据第二转换规则将相应的(R,G,B)颜色值转换为数字信息。
具体地,确定每种颜色对应的最大阶层,第四转换单元42根据公式(4)计算出所述数字信息的数值A:
A=(B*C+G)*C+R (4)
本实施例中,所述每种颜色对应的最大阶层相同,所述C为所述每种颜色对应的最大阶层,RGB颜色通常是由红(R)、绿(G)、蓝(B)三种颜色组成,每种颜色是有255种阶层,也就是说公式(3)中C的值为255。当将每个(R,G,B)颜色值的数字信息的数值确定出之后,将各组数字信息进行拼接形成一完整的数字信息,将所述数字信息存储至列表集合中。
本实施例中,因unicode编码格式的字符串是一个设定了统一并且唯一的二进制编码,因此unicode编码是一段数字。所以本实施例是将颜色值转换为unicode编码实现颜色值到数字信息的转换。
当获取到数字信息后,第五转换单元43用于将所述数字信息转换为字符编码。
具体地,本实施例中,第五转换单元43是将unicode编码转换为base64的编码:
转换代码如下:
第五转换单元43使用上述代码,返回的数据就是Base64的字符编码数据了。
当获取到字符编码后,所述第六转换单元44用于将所述字符编码转换为所述明文信息。
在获取到字符编码后,所述第六转换单元44利用代码:
Base64.encodeToString(str.getBytes(),Base64.DEFAULT);
就可以将Base64的字符编码转换为明文信息了。
这样,就完成了解密过程。
本发明中的一个或多个实施例带来的有益效果是:
一种信息加、解密的方法及装置,所述加密方法包括:获取待加密信息的明文信息;将所述明文信息统一转换为字符编码;将所字符编码转换为相应的数字信息;根据第一转换规则将所述数字信息转换为至少一组颜色值;通过所述至少一组颜色值生成图像,所述图像即为对所述明文信息进行加密的加密结果;这样,就将文字信息转换为图像实现对文字信息的加密,在传输过程中增强了信息的隐蔽性,从而避免破解者反编译破解,提高了数据的安全性。并且,如果想进一步提高信息的隐蔽性,还可以设置混淆色块,将混淆色块一并写入到图像中,如果没有正确的混淆数值,破译出来后也只是一堆混乱的色块而已,这样就进一步提高了数据的安全性。
以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。