1.一种基于位置换和位变换的加密方法,其特征在于,所述方法包括以下步骤:S1、开辟内存空间,为明文文件、密文文件及密钥文件准备对应的存储空间,其中初始的密钥文件来自已知编码序列,并且作为加密和解密的共用文件;
S2、按照位运算规则以改变初始的密钥流的位值,从而得到位变换的密钥流,然后按照依赖于密钥流的位运算规则改变明文的位值;
S3、在已经过位变换的明文流的基础上,按照依赖于密钥流的位置换规则,对位变换后的明文流进行位置换运算,并将其随机散布在密文流中,从而得到目标密文后储存为文件;
所述方法还包括:
对所述明文文件、密文文件和密钥文件分别创建对应的明文加密随机数、密文加密随机数和密钥加密随机数,根据加密随机数的值生成对应的工作指针;
对明文文件、密文文件、密钥文件进行工作指针位移读取;
对工作指针进行多次循环遍历,同时根据工作指针所指向的密钥流二进制位的值,对明文文件进行多次迭代,得到密文文件;
所述步骤S3包括:
将位变换后的明文流进行一次或多次的分组位置换;和/或将初始密文作为参数进行一次或多次的分组位置换;
以得到一次或多次加密后的密文文件;
在所述步骤S3中,所述的位置换运算步骤包括:
S311、在每个分组内设置双端指针,该两个指针的取值是由明文、密钥二进制流构成的循环队列的合法位置,并且该两个指针的初始距离被配置为明文、密钥的二进制流的长度;
S312、第一趟扫描明文、密钥,相向移动第一指针和第二指针,当第一指针和第二指针均指向密钥流的假值位时,置换明文的位值;
S313、重新设置分组内的双端指针,这两个指针相向移动,并且取值能够是明文、密钥二进制流构成的循环队列的合法位置,并且该指针的重置距离为明文、密钥的二进制流的长度;
S314、第二趟扫描明文、密钥,相向移动第一指针和第二指针,当第一指针和第二指针均指向密钥流的真值位时,置换明文的位值。
2.根据权利要求1所述的方法,其特征在于,所述步骤S1包括:初始化明文文件,加载需要加密的明文文件,设置密钥文件码元个数,其中密钥文件的字节长度能进行自定义设置;
用于初始的密钥文件的编码序列来自于文本文档、音频、视频、图片、图像、图形、伪随机码、混沌值中的任一者或者任意多者的组合。
3.根据权利要求1所述的方法,其特征在于,所述步骤S2包括:借助各种密钥流生成器产生的伪随机序列和各种混沌信号,或者借助任意的在二进制上码分布均匀的随机文件,以提供位变换运算规则。
4.根据权利要求1或3所述的方法,其特征在于,在所述步骤S2中,所述的位运算规则包括以下运算规则中的任意一种或者任意多种的组合:规则1:将满足以下布尔函数的二进制位进行取反
F(j)=(C+X×j)MOD Y==Z,
其中,C、X、Z为事先确定的整数,Y为质数,j为密钥流二进制位的编号;“MOD”表示求余运算,“==”表示判断相等运算;
规则2:根据密钥流的真值位或假值位取反。
5.根据权利要求1所述的方法,其特征在于,在所述步骤S3中,所述的位置换运算步骤包括:S321、在每个分组内设置双端指针,使这两个指针进行同向或相向移动,该两个指针的取值是由明文、密钥二进制流构成的循环队列的合法位置,并且对该两个指针的初始距离不进行配置;
S322、只扫描明文、密钥一趟,移动第一指针和第二指针,当第一指针指向密钥流的假值位,第二指针指向密钥流的真值位时,置换第一指针和第二指针对应的明文的位值,当其中一个指针已经绕明文或密钥的循环队列走一圈时结束;
S323、在指针结束位置进行明文的位值置换。
6.一种计算机装置,包括存储器、处理器及储存在存储器上并能够在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至5中任一项所述的方法。
7.一种计算机可读存储介质,其上储存有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至5中任一项所述的方法。