发明内容
为了解决上述的技术问题,本发明提供了一种实现方式简单、安全性高、灵活性强的基于流密码的动态加密解密方法。
本发明解决其技术问题所采用的技术方案是:
一种基于流密码的动态加密解密方法,包括:
读取明文文件,获得明文文件的长度m后,根据明文文件的长度m,选择一个小于长度m的自然数k作为加密系数;
对密钥文件的不同的二进制位,设定其对应的加密规则及相应的解密规则;
加密步骤:选取参考文件,并读取密钥文件,选择密钥文件的一个二进制位,根据该二进制位对应的加密规则,结合加密系数及参考文件,将明文文件的二进制位进行读写处理,进而生成密文文件;
解密步骤:读取密钥文件,根据加密过程中所选择的二进制位对应的解密规则,结合加密系数及参考文件,将密文文件的二进制位进行读写处理,进而得到还原的明文文件。
进一步,所述加密步骤包括:
S11、读取明文文件的字节数,根据该字节数,在计算机内存开辟明文存储空间,读取明文文件并将其存储在明文存储空间中,并创建第一明文字符指针Q1指向明文存储空间的第k位,同时创建第二明文字符指针Q2指向明文存储空间的第k+1位;
S12、根据明文文件的字节数,选择参考文件;
S13、根据明文文件的字节数,在计算机内存开辟参考存储空间后,读取参考文件并将其存储在参考存储空间中,并创建参考字符指针pf指向参考存储空间的首地址;
S14、读取密钥文件的字节数,根据密钥文件的字节数,在计算机内存开辟密钥存储空间后,读取密钥文件并将其存储在密钥存储空间中,并创建密钥字符指针pp指向密钥存储空间的首地址;
S15、根据明文文件的字节数,在计算机内存开辟密文存储空间,并创建密文字符指针pc指向密文存储空间的首地址;
S16、根据密钥字符指针pp所指向的二进制字符串的位所定义的加密规则,按顺序扫描参考字符指针pf所指向的二进制字符串的位,结合该扫描情况及加密规则,将第一明文字符指针Q1或第二明文字符指针Q2所指向的二进制位填入密文字符指针pc指向的密文存储空间中;
S17、读取密文存储空间的字节,进而生成密文文件;
其中,所述明文存储空间为循环链表,k为加密系数,所述第一明文字符指针Q1是向前遍历的,所述第二明文字符指针Q2是向后遍历的。
进一步,所述步骤S13,其具体为:
根据明文文件的字节数,在计算机内存开辟参考存储空间后,读取参考文件并将其存储在参考存储空间中,在读取参考文件的过程中,剔除为“0x00”和“0xff”的值,且所读取并存储的参考文件的字节数等于明文文件的字节数,并创建参考字符指针pf指向参考存储空间的首地址。
进一步,所述步骤S16中所述加密规则为:
按顺序扫描参考字符指针pf所指向的二进制字符串的位,若遇到值为“0”的位,则将第一明文字符指针Q1所指向的二进制位填入密文字符指针pc指向的密文存储空间,若遇到值为“1”的位,则将第二明文字符指针Q2所指向的二进制位填入密文字符指针pc指向的密文存储空间。
进一步,所述步骤S16中所述加密规则为:
按顺序扫描参考字符指针pf所指向的二进制字符串的位,若遇到值为“1”的位,则将第一明文字符指针Q1所指向的二进制位填入密文字符指针pc指向的密文存储空间,若遇到值为“0”的位,则将第二明文字符指针Q2所指向的二进制位填入密文字符指针pc指向的密文存储空间。
进一步,所述解密步骤包括:
S21、读取密文文件的字节数,根据该字节数,在计算机内存开辟密文存储空间后,读取密文文件并将其存储在密文存储空间中,并创建密文字符指针pc指向密文存储空间的首地址;
S22、根据密文文件的字节数,在计算机内存开辟参考存储空间后,读取在生成密文文件的加密过程中所使用的参考文件,并将参考文件存储在参考存储空间中,并创建参考字符指针pf指向参考存储空间的首地址;
S23、读取密钥文件的字节数,根据密钥文件的字节数,在计算机内存开辟密钥存储空间后,读取密钥文件并将其存储在密钥存储空间中,并创建密钥字符指针pp指向密钥存储空间的首地址;
S24、根据密文文件的字节数,在计算机内存开辟明文存储空间,并创建第一明文字符指针Q1指向明文存储空间的第k位,同时创建第二明文字符指针Q2指向明文存储空间的第k+1位;
S25、根据密钥字符指针pp所指向的二进制字符串的位所定义的解密规则,按顺序扫描参考字符指针pf所指向的二进制字符串的位,结合该扫描情况及解密规则,将密文字符指针pc所指向的二进制字符串读出后填入第一明文字符指针Q1或第二明文字符指针Q2所指向的明文存储空间中;
S26、读取明文存储空间的字节,进而得到还原的明文文件;
其中,所述明文存储空间为循环链表,k为加密系数,所述第一明文字符指针Q1是向前遍历的,所述第二明文字符指针Q2是向后遍历的。
进一步,所述步骤S22,其具体为:
根据密文文件的字节数,在计算机内存开辟参考存储空间,读取在生成密文文件的加密过程中所使用的参考文件,并将参考文件存储在参考存储空间中,在读取参考文件的过程中,剔除为“0x00”和“0xff”的值,且所读取并存储的参考文件的字节数等于密文文件的字节数,并创建参考字符指针pf指向参考存储空间的首地址。
进一步,所述步骤S25中所述解密规则为:
按顺序扫描参考字符指针pf所指向的二进制字符串的位,若遇到值为“0”的位,则将密文字符指针pc所指向的二进制位填入第一明文字符指针Q1指向的明文存储空间,若遇到值为“1”的位,则将密文字符指针pc所指向的二进制位填入第二明文字符指针Q2指向的明文存储空间。
进一步,所述步骤S25中所述解密规则为:
按顺序扫描参考字符指针pf所指向的二进制字符串的位,若遇到值为“1”的位,则将密文字符指针pc所指向的二进制位填入第一明文字符指针Q1指向的明文存储空间,若遇到值为“0”的位,则将密文字符指针pc所指向的二进制位填入第二明文字符指针Q2指向的明文存储空间。
本发明的有益效果是:本发明的一种基于流密码的动态加密解密方法,选取参考文件后,结合预先设定的加密系数及加密规则对明文文件的二进制文件进行加密,从而生成密文文件,在解密过程中,结合密文文件、参考文件、加密系数及对应的解密规则,将密文文件还原为明文文件,实现方式简单,安全性高,灵活性强。
具体实施方式
参照图1,本发明提供了一种基于流密码的动态加密解密方法,包括:
读取明文文件,获得明文文件的长度m后,根据明文文件的长度m,选择一个小于长度m的自然数k作为加密系数;
对密钥文件的不同的二进制位,设定其对应的加密规则及相应的解密规则;
加密步骤:选取参考文件,并读取密钥文件,选择密钥文件的一个二进制位,根据该二进制位对应的加密规则,结合加密系数及参考文件,将明文文件的二进制位进行读写处理,进而生成密文文件;
解密步骤:读取密钥文件,根据加密过程中所选择的二进制位对应的解密规则,结合加密系数及参考文件,将密文文件的二进制位进行读写处理,进而得到还原的明文文件。
例如密钥文件的二进制值为“01011100”,设定其第1、3、4、7二进制位所对应的加密规则为a1,相应的解密规则为b1,设定其第2、5、6、8二进制位所对应的加密规则为a2,相应的解密规则为b2,或者设定每一个二进制位都对应不同的加密规则及相应的解密规则,如,从最低位算起,每一位对应的加密规则为a1、a2、a3、a4、a5、a6、a7及a8,相应的解密规则分别为b1、b2、b3、b4、b5、b6、b7及b8,这里,加密规则a1、a2等还与密钥文件的二进制位的值有关,值为“0”时,对应一种加密方法,值为“1”时,对应另外一种加密方法。
进一步作为优选的实施方式,所述加密步骤包括:
S11、读取明文文件的字节数,根据该字节数,在计算机内存开辟明文存储空间,读取明文文件并将其存储在明文存储空间中,并创建第一明文字符指针Q1指向明文存储空间的第k位,同时创建第二明文字符指针Q2指向明文存储空间的第k+1位;
S12、根据明文文件的字节数,选择参考文件;
S13、根据明文文件的字节数,在计算机内存开辟参考存储空间后,读取参考文件并将其存储在参考存储空间中,并创建参考字符指针pf指向参考存储空间的首地址;
S14、读取密钥文件的字节数,根据密钥文件的字节数,在计算机内存开辟密钥存储空间后,读取密钥文件并将其存储在密钥存储空间中,并创建密钥字符指针pp指向密钥存储空间的首地址;
S15、根据明文文件的字节数,在计算机内存开辟密文存储空间,并创建密文字符指针pc指向密文存储空间的首地址;
S16、根据密钥字符指针pp所指向的二进制字符串的位所定义的加密规则,按顺序扫描参考字符指针pf所指向的二进制字符串的位,结合该扫描情况及加密规则,将第一明文字符指针Q1或第二明文字符指针Q2所指向的二进制位填入密文字符指针pc指向的密文存储空间中;
S17、读取密文存储空间的字节,进而生成密文文件;
其中,所述明文存储空间为循环链表,k为加密系数,所述第一明文字符指针Q1是向前遍历的,所述第二明文字符指针Q2是向后遍历的。
进一步作为优选的实施方式,所述步骤S13,其具体为:
根据明文文件的字节数,在计算机内存开辟参考存储空间后,读取参考文件并将其存储在参考存储空间中,在读取参考文件的过程中,剔除为“0x00”和“0xff”的值,且所读取并存储的参考文件的字节数等于明文文件的字节数,并创建参考字符指针pf指向参考存储空间的首地址。这里,因为“0x00”对应的二进制数为“00000000”,而“0xff”对应的二进制数为“11111111”,为了避免加密过程中因全“0”值或全“1”的数导致加密不完全,故将它们都剔除。
进一步作为优选的实施方式,所述步骤S16中所述加密规则为:
按顺序扫描参考字符指针pf所指向的二进制字符串的位,若遇到值为“0”的位,则将第一明文字符指针Q1所指向的二进制位填入密文字符指针pc指向的密文存储空间,若遇到值为“1”的位,则将第二明文字符指针Q2所指向的二进制位填入密文字符指针pc指向的密文存储空间。
进一步作为优选的实施方式,所述步骤S16中所述加密规则为:
按顺序扫描参考字符指针pf所指向的二进制字符串的位,若遇到值为“1”的位,则将第一明文字符指针Q1所指向的二进制位填入密文字符指针pc指向的密文存储空间,若遇到值为“0”的位,则将第二明文字符指针Q2所指向的二进制位填入密文字符指针pc指向的密文存储空间。
进一步作为优选的实施方式,所述解密步骤包括:
S21、读取密文文件的字节数,根据该字节数,在计算机内存开辟密文存储空间后,读取密文文件并将其存储在密文存储空间中,并创建密文字符指针pc指向密文存储空间的首地址;
S22、根据密文文件的字节数,在计算机内存开辟参考存储空间后,读取在生成密文文件的加密过程中所使用的参考文件,并将参考文件存储在参考存储空间中,并创建参考字符指针pf指向参考存储空间的首地址;
S23、读取密钥文件的字节数,根据密钥文件的字节数,在计算机内存开辟密钥存储空间后,读取密钥文件并将其存储在密钥存储空间中,并创建密钥字符指针pp指向密钥存储空间的首地址;
S24、根据密文文件的字节数,在计算机内存开辟明文存储空间,并创建第一明文字符指针Q1指向明文存储空间的第k位,同时创建第二明文字符指针Q2指向明文存储空间的第k+1位;
S25、根据密钥字符指针pp所指向的二进制字符串的位所定义的解密规则,按顺序扫描参考字符指针pf所指向的二进制字符串的位,结合该扫描情况及解密规则,将密文字符指针pc所指向的二进制字符串读出后填入第一明文字符指针Q1或第二明文字符指针Q2所指向的明文存储空间中;
S26、读取明文存储空间的字节,进而得到还原的明文文件;
其中,所述明文存储空间为循环链表,k为加密系数,所述第一明文字符指针Q1是向前遍历的,所述第二明文字符指针Q2是向后遍历的。
进一步作为优选的实施方式,所述步骤S22,其具体为:
根据密文文件的字节数,在计算机内存开辟参考存储空间,读取在生成密文文件的加密过程中所使用的参考文件,并将参考文件存储在参考存储空间中,在读取参考文件的过程中,剔除为“0x00”和“0xff”的值,且所读取并存储的参考文件的字节数等于密文文件的字节数,并创建参考字符指针pf指向参考存储空间的首地址。
进一步作为优选的实施方式,所述步骤S25中所述解密规则为:
按顺序扫描参考字符指针pf所指向的二进制字符串的位,若遇到值为“0”的位,则将密文字符指针pc所指向的二进制位填入第一明文字符指针Q1指向的明文存储空间,若遇到值为“1”的位,则将密文字符指针pc所指向的二进制位填入第二明文字符指针Q2指向的明文存储空间。
进一步作为优选的实施方式,所述步骤S25中所述解密规则为:
按顺序扫描参考字符指针pf所指向的二进制字符串的位,若遇到值为“1”的位,则将密文字符指针pc所指向的二进制位填入第一明文字符指针Q1指向的明文存储空间,若遇到值为“0”的位,则将密文字符指针pc所指向的二进制位填入第二明文字符指针Q2指向的明文存储空间。
在计算机系统中,每对字符指针指向的值做一次操作,字符指针都会相移的偏移,故上述描述中,没有重复描述这一点。同时,为了保证完整的进行加密,选取参考文件时须保证参考文件的字节数大于或等于明文文件的字节数,考虑到参考文件可能出现值为“0x00”或“0xff”的情况,一般选择字节数稍大于明文文件的字节数的参考文件。
下面结合实施例对本发明的一种基于流密码的动态加密解密方法做进一步说明:
首先定义加密规则:设明文文件M中码元个数为m,参考文件F中码元个数为n,n≥m,若n>m,读取参考文件F时,只需读入到到第m位即可,这里,码元个数即前面所述的文件的长度,例如明文文件的码元个数为m,即其长度也为m。选择自然数k作为加密系数,0≤k≤m-1,创建第一明文字符指针Q1指向明文文件M的第k位,同时创建第二明文字符指针Q2指向明文文件M的第k+1位;根据密钥文件P的最低位的值进行加密:
(1)若该值为“0”,则加密规则为:按位扫描参考文件,当扫描到参考文件F的某位为“0”时,将第一明文字符指针Q1所指向的二进制位填入参考文件F且第一明文字符指针Q1向前移位,而当扫描到参考文件F的某位为“1”时,将第二明文字符指针Q2所指向的二进制位填入参考文件F且第二明文字符指针Q2向后移位,最后,生成密文文件C;
(2)若该值为“1”,则加密规则为:按位扫描参考文件,当扫描到参考文件F的某位为“1”时,将第一明文字符指针Q1所指向的二进制位填入参考文件F且第一明文字符指针Q1向前移位,而当扫描到参考文件F的某位为“0”时,将第二明文字符指针Q2所指向的二进制位填入参考文件F且第二明文字符指针Q2向后移位,最后,生成密文文件C;明显的,密文文件C的码元个数也为m。
本发明在实施中,为了避免参考文件F被更改,加密过程中采用方法为:建立与明文文件M具有相同码元m的密文文件C,加密时,根据第一明文字符指针Q1及第二明文字符指针Q2的指向,将明文文件M的码元按位填入到密文文件C与参考文件F对应为{0}或为{1}的位上。
解密过程与加密过程类似,与密钥文件P的最低位的值相关,上述两种加密规则对应的解密规则为:
(1-1)若该值为“0”,则解密规则为:按位扫描参考文件,当扫描到参考文件F的某位为“0”时,将密文文件C与参考文件的该相应位填入第一明文字符指针Q1所指向的二进制位,且第一明文字符指针Q1向前移位,而当扫描到参考文件F的某位为“1”时,将密文文件C与参考文件的该相应位填入第二明文字符指针Q2所指向的二进制位,且第二明文字符指针Q2向后移位,最后,得到还原的明文文件M;
(1-2)若该值为“1”,则解密规则为:按位扫描参考文件,当扫描到参考文件F的某位为“1”时,将密文文件C与参考文件的该相应位填入第一明文字符指针Q1所指向的二进制位,且第一明文字符指针Q1向前移位,而当扫描到参考文件F的某位为“0”时,将密文文件C与参考文件的该相应位填入第二明文字符指针Q2所指向的二进制位,且第二明文字符指针Q2向后移位,最后,得到还原的明文文件M。
本发明的一实施例为:设明文文件M={01100001},明文文件M的位数为m=8,参考文件F={01000001},密钥文件P={01000001},密钥文件P的最低位的值为“0”, 取加密系数k=6,即第一明文字符指针Q1指向明文文件M的第6位,第二明文字符指针Q2指向明文文件M的第7位,根据加密规则及对应的解密规则建立算法集合A={a,b},其中a为加密算法,b为对应的解密算法,因此,用加密算法a加密明文文件M之后得到密文文件C={00001101},同样的,对密文文件C采用解密算法b解密后得到还原的明文文件M={01100001}。要得到还原的明文文件M,需要结合加密系数k、参考文件F、密钥文件P及解密算法b,因此,就算密文文件C被窃取,也无法得到原始的明文文件M。实际应用中,密钥文件P的位数可为32位至128位,每一位可以定义不同的加密解密规则,例如定义从参考文件F的第几位码元开始扫描,定义循环扫描参考文件F的码元位等。再结合选择不同类型及不同大小的参考文件F,如文档、图片及音视频等,可实现加密的多样化,从而保证了加密解密过程的安全性。
以上是对本发明的较佳实施进行了具体说明,但本发明创造并不限于所述实施例,熟悉本领域的技术人员在不违背本发明精神的前提下还可作出种种的等同变形或替换,这些等同的变型或替换均包含在本申请权利要求所限定的范围内。