本发明涉及基于双密钥流密码的单向链表顺序加密解密方法,属于信息安全领域。
背景技术:
网络通信信息加密,航天数字遥控指令与数据加密,无人机数字遥控通信数据加密,预警机数字通信指挥系统信息加密,gps卫星数字通信数据加密,手机通信加密,电子邮件加密,电子金融数据传输加密等。
在影像编码方面,可对各种格式影像加密,保护影像知识产权。对于军事、政治、外交文件加密后,可利用民用通信网络传输,节省文件传送成本。
流密码(streamcipher),也称之为序列密码。现有流密码的研究状态,由于流密码的分析和设计往往用于一个国家的军事和外交通信。所以,流密码的研发和设计基本上都是在保密的状态下进行,各个国家研发流密码的学者和专家为了保密几乎没有过多的这方面的公开的论著。
各国都将流密码技术和产品,作为军工产品而限制出口。由于它具有许多其他密码不可比拟的优点,所以,它是当今最为通用的密码系统之一。
现在的流密码学的研究方向,都是以数学模型为基础,使用复杂的代数运算、布尔代数运算、伪随机数、移位寄存器、线性反馈等。完成流密码的加密和解密。在这方面比较成功的方法有a5方法,s盒方法,rc4方法,k2方法等。这些方法已经是不公开的秘密,经过多年的研究,对其加密和解密已经具有了一定的成熟手段。
现在已有很多学者研究攻击和破译上述方法加密的密文。这就使得使用以上的方法进行加密的密文,其安全性受到极大的挑战。
目前流密码的设计方案,主要采用系统论的方法,密钥流序列的生成主要是利用线性反馈移位寄存器产生伪随机序列。
生成伪随机数列的方法如下:反馈移位寄存器序列;线性移位寄存器加非线性前馈函数产生前馈序列;钟控序列;组合网络序列;进位移位寄存器;元胞自动机;混沌理论等。
技术实现要素:
针对现有技术的不足,本发明的技术方案提供了本发明基于双密钥流密码的单向链表顺序加密解密方法。采用的是混沌流,不同于以往的混沌流,本发明提出的混沌流可以是任意的文件模式,而不是由函数或信号发生器产生的混沌流,也可称本混沌流为真随机序列,而不是伪随机序列的动态寄生法,本方法即使被猜到,由于混沌流是一个无序的序列,所以,要想破译,几乎不可能实现。用穷举法,在数学上几乎不可能实现,穷举的次数为明文的字节数(n)8倍的二次幂,即:28n,在计算机上也几乎不可能实现。
本发明的技术方案包括基于双密钥流密码的单向链表顺序加密解密方法,其特征在于,该方法包括:根据明文文件创建明文集合m,其中明文可以是任意是任意可解析文件;将明文集合m作为初始集合并进行顺序迭代加密得到密文集合c,其中迭代加密结合使用参照串、密钥集合p及算法集合a,其中参照串为2m字节,其中m>=0;所述迭代加密包括获取文集合m、密文集合c、密钥集合p任意值作为初值以及初值对应的位指针,通过位指针、参照串及算法集合a的加密算法对文集合m进行两次迭代加密,得到密文集合c,其中文集合m及密钥集合p对应用于加密的位指针不同时为顺或散;对密文集合c调用密钥集合p进行多次解密,其中加密使用密钥集合p和算法集合a,其中加密和解密共享密钥集合p和算法集合a,且集合m、c均为双向循环链表,其中文集合m及密钥集合p对应用于加密的位指针不同时为顺或散;所述解密包括取回迭代加密的初值,创建初值对应的位指针结合c参照串及算法集合a的加密算法对密文集合c进行两次解密,得到明文集合m,并将明文集合m转换为明文文件。
根据所述的基于双密钥流密码的单向链表顺序加密解密方法,其中明文集合m、密文集合c、密钥集合p及算法集合a均为二进制码元组成的字符集。
根据所述的基于双密钥流密码的单向链表顺序加密解密方法,其中根据明文文件创建明文集合m包括:读取明文文件,得到明文文件字节数n;创建明文集合m为为有序集,其中m={x0x1…xn-1},xi={0,1},并且有i(0<=i<=n-1),m作为循环链表则有xn-1的后继是x0。
根据所述的基于双密钥流密码的单向链表顺序加密解密方法,其中该方法还包括:所述密钥集合p包括第一密钥子集和第二密钥子集,所述第一密钥p0={y00y01…y0n-1},y0j0={0,1},其中j0(0<=j0<=n-1),且p0为有序集合,所述第二密钥子集p1={y10y11…y1n-1},y1j1={0,1},其中j1(0<=j1<=n-1),且p1为有序集合,第一密钥子集p0和第二密钥子集作为单向循环链表,对于p0则有y0n-1的后继是y00,对于p1则有y1n-1的后继是y10,其中集合p0及集合p1为单向循环链表。
根据所述的基于双密钥流密码的单向链表顺序加密解密方法,其中该方法还包括:所述密文集合c包括第一密文子集和第二密文子集,所述第一密文子集c0={z00z01…z0n-1},y0k0={0,1},其中k0(0<=k0<=n-1),且c0为有序集合,所述第二密钥子集c1={z10z11…z1n-1},z1k1={0,1},其中k1(0<=k1<=n-1),且c1为有序集合,第一密钥集合c0和第二密钥集合c1作为单向循环链表,对于c0则有z0n-1的后继是z00,对于c1则有z1n-1的后继是z10。
根据所述的基于双密钥流密码的单向链表顺序加密解密方法,其中该方法还包括:将明文集合m作为初值并进行迭代加密得到密文集合c的加密步骤包括四种失败加密方法、八种半加密方法及四种双密钥加密方法,舍弃所有失败加密方法和半加密方法并执行四种双密钥加密方法,其中四种双密钥加密方法包括根据循环链表的指针进行顺序加密。
根据所述的基于双密钥流密码的单向链表顺序加密解密方法,其中该方法还包括:取任意初值i0(0<=i0<=n-1),作为m集合的初值,并保留该初值;取任意初值i1(0<=i1<=n-1),作为c0集合的初值,并保留该初值;取任意初值j0(0<=j0<=n-1),作为p0集合的初值,并保留该初值;取任意初值j1(0<=j1<=n-1),作为p1集合的初值,并保留该初值;取任意初值k0(0<=k0<=n-1),作为c0集合的初值,并保留该初值;取任意初值k1(0<=k1<=n-1),作为c1集合的初值,并保留该初值;建立位指针p,第一次加密p指向m集合的xi位;建立位指针q,第一次加密q指向p0集合的y0j0位;建立位指针r,第一次加密r指向c0集合的z0k0位;建立位指针p,第二次加密p指向c0集合的xi1位;建立位指针q,第二次加密q指向p1集合的y1j1位;建立位指针r,第二次加密r指向c1集合的z1k1位。
根据所述的基于双密钥流密码的单向链表顺序加密解密方法,其中双密钥加密方法还包括:第一加密方法,包括第一加密步骤和第二加密步骤,其中第一加密步骤包括:第一次加密p指向m集合的xi0位;第一次加密q指向p0集合的y0j0位;第一次加密r指向c0集合的z0k0位;执行第一次遍历,判断*q是否为真,若是则*r=*p,且p、q及r递增,若*q结果不为真,则p及q递增,第一次遍历结束,p指向m集合xi0位,q指向p0集合的y0j0位;执行第二次遍历,判断*q是否为假,若是则*r=*p,且p、q及r递增,若*q结果不为假,则p及q递增,第二次遍历结束并得到已加密的c0,将已加密的c0写入文件,结束第一加密步骤;其中第二加密步骤包括:第一次加密p指向已加密的c0集合的z0i1位;第一次加密q指向p1集合的y1j1位;第一次加密r指向c1集合的z1k1位;执行第一次遍历,判断*q是否为真,若是则*r=*p,且p、q及r递增,若*q结果不为真,则p及q递增,第一次遍历结束,p指向已加密的c0集合的z0i1位,q指向p0集合的y1j1位;执行第二次遍历,判断*q是否为假,若是则*r=*p,且p、q及r递增,若*q结果不为假,则p及q递增,第二次遍历结束并得到已加密的c1,将已加密的c1写入文件,结束第二加密步骤;
所述第一加密步骤的中p为散r为顺,所述第二加密步骤的p为散r为顺。
根据任意所述的基于双密钥流密码的单向链表顺序加密解密方法,其中该方法还包括:第一加密方法,包括第一加密步骤和第二加密步骤,其中第一加密步骤包括:第一次加密p指向m集合的xi0位;第一次加密q指向p0集合的y0j0位;第一次加密r指向c0集合的z0k0位;执行第一次遍历,判断*q是否为真,若是则*r=*p,且p、q及r递增,若*q结果不为真,则p及q递增,第一次遍历结束,p指向m集合xi0位,q指向p0集合的y0j0位;执行第二次遍历,判断*q是否为假,若是则*r=*p,且p、q及r递增,若*q结果不为假,则p及q递增,第二次遍历结束并得到已加密的c0,将已加密的c0写入文件,结束第一加密步骤;其中第二加密步骤包括:第一次加密p指向已加密的c0集合的z0i1位;第一次加密q指向p1集合的y1j1位;第一次加密r指向c1集合的z1k1位;执行第一次遍历,判断*q是否为真,若是则*r=*p,且p、q及r递增,若*q结果不为真,则p及q递增,第一次遍历结束,p指向已加密的c0集合的z0i1位,q指向p0集合的y1j1位;执行第二次遍历,判断*q是否为假,若是则*r=*p,且p、q及r递增,若*q结果不为假,则p及q递增,第二次遍历结束并得到已加密的c1,将已加密的c1写入文件,结束第二加密步骤;所述第一加密步骤的中p为散r为顺,所述第二加密步骤的p为顺r为散。
根据任意所述的基于双密钥流密码的单向链表顺序加密解密方法,其中该方法还包括:第一加密方法,包括第一加密步骤和第二加密步骤,其中第一加密步骤包括:第一次加密p指向m集合的xi0位;第一次加密q指向p0集合的y0j0位;第一次加密r指向c0集合的z0k0位;执行第一次遍历,判断*q是否为真,若是则*r=*p,且p、q及r递增,若*q结果不为真,则p及q递增,第一次遍历结束,p指向m集合xi0位,q指向p0集合的y0j0位;执行第二次遍历,判断*q是否为假,若是则*r=*p,且p、q及r递增,若*q结果不为假,则p及q递增,第二次遍历结束并得到已加密的c0,将已加密的c0写入文件,结束第一加密步骤;其中第二加密步骤包括:第一次加密p指向已加密的c0集合的z0i1位;第一次加密q指向p1集合的y1j1位;第一次加密r指向c1集合的z1k1位;执行第一次遍历,判断*q是否为真,若是则*r=*p,且p、q及r递增,若*q结果不为真,则p及q递增,第一次遍历结束,p指向已加密的c0集合的z0i1位,q指向p0集合的y1j1位;执行第二次遍历,判断*q是否为假,若是则*r=*p,且p、q及r递增,若*q结果不为假,则p及q递增,第二次遍历结束并得到已加密的c1,将已加密的c1写入文件,结束第二加密步骤;所述第一加密步骤的中p为顺r为散,所述第二加密步骤的p为散r为顺。
根据任意所述的基于双密钥流密码的单向链表顺序加密解密方法,其中该方法还包括:第一加密方法,包括第一加密步骤和第二加密步骤,其中第一加密步骤包括:第一次加密p指向m集合的xi0位;第一次加密q指向p0集合的y0j0位;第一次加密r指向c0集合的z0k0位;执行第一次遍历,判断*q是否为真,若是则*r=*p,且p、q及r递增,若*q结果不为真,则p及q递增,第一次遍历结束,p指向m集合xi0位,q指向p0集合的y0j0位;执行第二次遍历,判断*q是否为假,若是则*r=*p,且p、q及r递增,若*q结果不为假,则p及q递增,第二次遍历结束并得到已加密的c0,将已加密的c0写入文件,结束第一加密步骤;其中第二加密步骤包括:第一次加密p指向已加密的c0集合的z0i1位;第一次加密q指向p1集合的y1j1位;第一次加密r指向c1集合的z1k1位;执行第一次遍历,判断*q是否为真,若是则*r=*p,且p、q及r递增,若*q结果不为真,则p及q递增,第一次遍历结束,p指向已加密的c0集合的z0i1位,q指向p0集合的y1j1位;执行第二次遍历,判断*q是否为假,若是则*r=*p,且p、q及r递增,若*q结果不为假,则p及q递增,第二次遍历结束并得到已加密的c1,将已加密的c1写入文件,结束第二加密步骤;所述第一加密步骤的中p为顺r为散,所述第二加密步骤的p为顺r为散。
根据任意所述的基于双密钥流密码的单向链表顺序加密解密方法,其中还包括双密钥加密方法对应的解密方法,包括:取回用于解密的初值i0、i1、j0、j1、k0及k1;第一解密方法,包括第一解密步骤和第二解密步骤,其中第一解密步骤包括:第一次解密p指向所述已加密的c0集合的z0i1位;第一次解密q指向p1集合的y1j1位;第一次解密r指向c1集合的z1k1位;执行第一次遍历,判断*q是否为真,若是则*r=*p,且p、q及r递增,若*q结果不为真,则p及q递增,第一次遍历结束,p指向已加密的集合c0的z0i1位,q指向p0集合的y1j1位;执行第二次遍历,判断*q是否为假,若是则*r=*p,且p、q及r递增,若*q结果不为假,则p及q递增,第二次遍历结束并得到已解密的c0,将已解密的c0写入密码文件,结束第一解密步骤;其中第二解密步骤包括:第二次加密p指向m集合的xi0位;第二次加密q指向p0集合的y0j0位;第二次加密r指向c0集合的z0k0位;执行第一次遍历,判断*q是否为真,若是则*r=*p,且p、q及r递增,若*q结果不为真,则p及q递增,第一次遍历结束,p指向m集合的xi0位,q指向p0集合的y0j0位;执行第二次遍历,判断*q是否为假,若是则*r=*p,且p、q及r递增,若*q结果不为假,则p及q递增,第二次遍历结束并得到明文集合m,将已解密的明文集合m写入明文文件,结束第二解密步骤;所述第一解密步骤的中p为散r为顺,所述第二解密步骤的p为散r为顺。
根据任意所述的基于双密钥流密码的单向链表顺序加密解密方法,其中还包括双密钥加密方法对应的解密方法,包括:取回用于解密的初值i0、i1、j0、j1、k0及k1;第二解密方法,包括第一解密步骤和第二解密步骤,其中第一解密步骤包括:第一次解密p指向所述已加密的c0集合的z0i1位;第一次解密q指向p1集合的y1j1位;第一次解密r指向c1集合的z1k1位;执行第一次遍历,判断*q是否为真,若是则*r=*p,且p、q及r递增,若*q结果不为真,则p及q递增,第一次遍历结束,p指向已加密的集合c0的z0i1位,q指向p0集合的y1j1位;执行第二次遍历,判断*q是否为假,若是则*r=*p,且p、q及r递增,若*q结果不为假,则p及q递增,第二次遍历结束并得到已解密的c0,将已解密的c0写入密码文件,结束第一解密步骤;其中第二解密步骤包括:第二次加密p指向m集合的xi0位;第二次加密q指向p0集合的y0j0位;第二次加密r指向c0集合的z0k0位;执行第一次遍历,判断*q是否为真,若是则*r=*p,且p、q及r递增,若*q结果不为真,则p及q递增,第一次遍历结束,p指向m集合的xi0位,q指向p0集合的y0j0位;执行第二次遍历,判断*q是否为假,若是则*r=*p,且p、q及r递增,若*q结果不为假,则p及q递增,第二次遍历结束并得到明文集合m,将已解密的明文集合m写入明文文件,结束第二解密步骤;所述第一解密步骤的中p为散r为顺,所述第二解密步骤的p为顺r为散。
根据任意所述的基于双密钥流密码的单向链表顺序加密解密方法,其中还包括双密钥加密方法对应的解密方法,包括:取回用于解密的初值i0、i1、j0、j1、k0及k1;第三解密方法,包括第一解密步骤和第二解密步骤,其中第一解密步骤包括:第一次解密p指向所述已加密的c0集合的z0i1位;第一次解密q指向p1集合的y1j1位;第一次解密r指向c1集合的z1k1位;执行第一次遍历,判断*q是否为真,若是则*r=*p,且p、q及r递增,若*q结果不为真,则p及q递增,第一次遍历结束,p指向已加密的集合c0的z0i1位,q指向p0集合的y1j1位;执行第二次遍历,判断*q是否为假,若是则*r=*p,且p、q及r递增,若*q结果不为假,则p及q递增,第二次遍历结束并得到已解密的c0,将已解密的c0写入密码文件,结束第一解密步骤;其中第二解密步骤包括:第二次加密p指向m集合的xi0位;第二次加密q指向p0集合的y0j0位;第二次加密r指向c0集合的z0k0位;执行第一次遍历,判断*q是否为真,若是则*r=*p,且p、q及r递增,若*q结果不为真,则p及q递增,第一次遍历结束,p指向m集合的xi0位,q指向p0集合的y0j0位;执行第二次遍历,判断*q是否为假,若是则*r=*p,且p、q及r递增,若*q结果不为假,则p及q递增,第二次遍历结束并得到明文集合m,将已解密的明文集合m写入明文文件,结束第二解密步骤;所述第一解密步骤的中p为顺r为散,所述第二解密步骤的p为散r为顺。
根据任意所述的基于双密钥流密码的单向链表顺序加密解密方法,其中还包括双密钥加密方法对应的解密方法,包括:取回用于解密的初值i0、i1、j0、j1、k0及k1;第四解密方法,包括第一解密步骤和第二解密步骤,其中第一解密步骤包括:第一次解密p指向所述已加密的c0集合的z0i1位;第一次解密q指向p1集合的y1j1位;第一次解密r指向c1集合的z1k1位;执行第一次遍历,判断*q是否为真,若是则*r=*p,且p、q及r递增,若*q结果不为真,则p及q递增,第一次遍历结束,p指向已加密的集合c0的z0i1位,q指向p0集合的y1j1位;执行第二次遍历,判断*q是否为假,若是则*r=*p,且p、q及r递增,若*q结果不为假,则p及q递增,第二次遍历结束并得到已解密的c0,将已解密的c0写入密码文件,结束第一解密步骤;其中第二解密步骤包括:第二次加密p指向m集合的xi0位;第二次加密q指向p0集合的y0j0位;第二次加密r指向c0集合的z0k0位;执行第一次遍历,判断*q是否为真,若是则*r=*p,且p、q及r递增,若*q结果不为真,则p及q递增,第一次遍历结束,p指向m集合的xi0位,q指向p0集合的y0j0位;执行第二次遍历,判断*q是否为假,若是则*r=*p,且p、q及r递增,若*q结果不为假,则p及q递增,第二次遍历结束并得到明文集合m,将已解密的明文集合m写入明文文件,结束第二解密步骤;所述第一解密步骤的中p为顺r为散,所述第二解密步骤的p为顺r为散。
根据所述的基于双密钥流密码的单向链表顺序加密解密方法,其中算法集合a包括至少一对用于加密的算法及对应的解密算法,且对于算法集合a,中的元素个数记作sum(a),具有sum(a)mod2=0。
根据所述的基于双密钥流密码的单向链表顺序加密解密方法,其特征在于,其中所述密钥集合p对应的密钥文件包括但不限于音频、视频、图片、图像、图形、伪随机码及混沌值。
本发明的有益效果为:方法简单,破译极难;使用计算机算法与编程,实现容易;明文解密、发送、接受,解密实行三分离原则,使得保密系统更加安全;本解密方法不是传统的一对一,一对多;而是无序解密;可在现有的、公开的通信信道进行传输;不需要任何的辅助硬件设备;完全用软件实现;密钥字节可以是任意长度,随着密钥字节长度的增加,其解密复杂度也随之增加。
附图说明
图1所示为根据本发明实施方式的总体流程图;
图2所示为根据本发明实施方式的“p散r顺”和“p散r顺”加密解密详解图;
图3所示为根据本发明实施方式的“p散r顺”和“p顺r散”加密解密详解图;
图4所示为根据本发明实施方式的“p顺r散”和“p散r顺”加密解密详解图;
图5所示为根据本发明实施方式的“p顺r散”和“p顺r散”加密解密详解图;
图6所示为根据本发明实施方式的加密组合图。
具体实施方式
为了使本发明的目的、技术方案和优点更加清楚,下面结合附图和具体实施例对本发明进行详细描述。本发明的基于双密钥流密码的顺向链表顺序解密解密方法适用于解密解密。
图1所示为根据本发明实施方式的总体流程图。根据明文文件创建明文集合m,其中明文可以是任意是任意可解析文件;将明文集合m作为初始集合并进行顺序迭代加密得到密文集合c,其中迭代加密结合使用参照串、密钥集合p及算法集合a,其中参照串为2m字节,其中m>=0;所述迭代加密包括获取文集合m、密文集合c、密钥集合p任意值作为初值以及初值对应的位指针,通过位指针、参照串及算法集合a的加密算法对文集合m进行两次迭代加密,得到密文集合c,其中文集合m及密钥集合p对应用于加密的位指针不同时为顺或散;对密文集合c调用密钥集合p进行多次解密,其中加密使用密钥集合p和算法集合a,其中加密和解密共享密钥集合p和算法集合a,且集合m、c均为双向循环链表,其中文集合m及密钥集合p对应用于加密的位指针不同时为顺或散;所述解密包括取回迭代加密的初值,创建初值对应的位指针结合c参照串及算法集合a的加密算法对密文集合c进行两次解密,得到明文集合m,并将明文集合m转换为明文文件。
在本方法中,要想达到破译,必须要具备4个条件,1、算法程序;2、密文文件(一密一钥);3、秘钥文件1(也可称为秘钥);4、秘钥文件2(也可称为秘钥);但是,同时获得4个文件是不可能事件。其具体包括定义,加密及解密。
(1)集合属性
加密体制四元组(m,c,p,a)。m,c,p,a集合具有如下特性:
1.集合内的信息{0,1}是由二进制码元组成的字节符集。适用ascii码。
2.明文集合m具有n个字节,其码元个数记作:sum(m)=8n,具有sum(m)mod8=0;
3.密文集合c的元素个数是将m集合作为初值,经过r次迭代得到c1,c2,c3,…,cr。对于cj(j=1,2,3,…,r)子集码元个数记作:sum(cj),具有sum(cj)mod8=0;假设cj的字节数为m,则有:
当m<n,压缩加密。
当m=n,称之为一对一加密,或称之为等密度加密。
当m>n,称之为冗余加密。
4.秘钥集合p的码元个数。记作:sum(p),具有sum(p)mod8=0;假设p集合内字节数为m,有m≤n。初步定义p集合内的字节数为1字节。加密、解密共享秘钥集合p。该集合中不含有码。
5.本定义中的算法具有,可行性、确切性、有穷性、有唯一输入、有唯一输出。
6.算法集合a是由计算机可执行的代码集合。也称为函数的集合。集合a中的元素个数记作sum(a),具有sum(a)mod2=0。
算法集合特性:
若存在算法a,使得ci加密成cj,则必存在算法b,使得cj还原成ci。即存在逆算法。或还原算法。
二、加密原理
1.设明文集合
m={x0x1…xn-1},xi={0,1},并有i(0≤i≤n-1),该集合为有序集。
2.设秘钥集合
p0={y00y01…y0n-1},y0j0={0,1},并有j0(0≤i≤n-1),该集合为有序集。
p1={y10y11…y1n-1},y1j1={0,1},并有j1(0≤i≤n-1),该集合为有序集。
3.设密文集合
c0={z00z01…z0n-1},z0k0={0,1},并有k0(0≤i≤n-1),该集合为有序集。
c1={z10z11…z1n-1},z1k1={0,1},并有k1(0≤i≤n-1),该集合为有序集。
4.将m集合视为循环链表,既有xn-1的后继是x0。
5.将p0,p1集合视为循环链表,p0有y0n-1的后继是y00;p1有y1n-1的后继是y10;
6.将c0集合视为循环链表,既有z0n-1的后继是z00。
7.将c1集合视为循环链表,既有z1n-1的后继是z10。
8.取任意初值i0(0≤i0≤n-1),作用于m集合的初值,并保留该值。
9.取任意初值i1(0≤i1≤n-1),作用于c0集合的初值,并保留该值。
10.取任意初值j0(0≤j0≤n-1),作用于p0集合的初值,并保留该值。
12.取任意初值k0(0≤k0≤n-1),作用于c0集合的初值,并保留该值。
13.取任意初值k1(0≤k1≤n-1),作用于c1集合的初值,并保留该值。
14.建立位指针p,第一次加密p指向m集合xi位。
15.建立位指针q,第一次加密q指向p0集合y0j0位。
16.建立位指针r,第一次加密r指向c0集合z0k0位。
17.建立位指针p,第二次加密p指向c0集合xi1位。
18.建立位指针q,第二次加密q指向p1集合y1j1位。
19.建立位指针r,第二次加密r指向c1集合z1k1位。
本加密方法共有16种具体的加密方法,其中。4种加密为失败加密。8种加密为半加密,等同与一个密钥加密,舍弃。真正能够达到双密钥加密仅有4种加密方法。
加密方法1(p散r顺,p散r顺):
第一轮加密
1.第一轮加密p指向m集合xi0位。
2.第一轮加密q指向p0集合y0j0位。
3.第一轮加密r指向c0集合z0k0位。
4.第一次遍历,判断*q为真,则:*r=*p;p++;q++;r++;否则:q++;p++;
5.第一次遍历结束。p指向m集合xi0位。q指向p0集合y0j0位。
6.第二次遍历,判断*q为假,则:*r=*p;p++;q++;r++;否则:q++;p++;
7.第二次遍历结束。得到密码c0。将c0写入密码文件,第一次加密结束。
第二轮加密
1.第一轮加密p指向c0集合z0i1位。
2.第一轮加密q指向p1集合y1j1位。
3.第一轮加密r指向c1集合z1k1位。
4.第一次遍历,判断*q为真,则:*r=*p;p++;q++;r++;否则:q++;p++;
5.第一次遍历结束。p指向c0集合z0i1位。q指向p0集合y1j1位。
6.第二次遍历,判断*q为假,则:*r=*p;p++;q++;r++;否则:q++;p++;
7.第二次遍历结束。得到密码c1。将c1写入密码文件,第二次加密结束。
加密方法2(p散r顺,p顺r散):
第一轮加密
1.第一轮加密p指向m集合xi0位。
2.第一轮加密q指向p0集合y0j0位。
3.第一轮加密r指向c0集合z0k0位。
4.第一次遍历,判断*q为真,则:*r=*p;p++;q++;r++;否则:q++;p++;
5.第一次遍历结束。p指向m集合xi0位。q指向p0集合y0j0位。
6.第二次遍历,判断*q为假,则:*r=*p;p++;q++;r++;否则:q++;p++;
7.第二次遍历结束。得到密码c0。将c0写入密码文件,第一次加密结束。
第二轮加密
1.第一轮加密p指向c0集合z0i1位。
2.第一轮加密q指向p1集合y1j1位。
3.第一轮加密r指向c1集合z1k1位。
4.第一次遍历,判断*q为真,则:*r=*p;p++;q++;r++;否则:q++;r++;
5.第一次遍历结束。r指向c1集合z1k1位。q指向p0集合y1j1位。
6.第二次遍历,判断*q为假,则:*r=*p;p++;q++;r++;否则:q++;r++;
7.第二次遍历结束。得到密码c1。将c1写入密码文件,第二次加密结束。
加密方法3(p顺r散,p散r顺):
第一轮加密
1.第一轮加密p指向m集合xi0位。
2.第一轮加密q指向p0集合y0j0位。
3.第一轮加密r指向c0集合z0k0位。
4.第一次遍历,判断*q为真,则:*r=*p;p++;q++;r++;否则:q++;r++;
5.第一次遍历结束。r指向c0集合z0k0位。q指向p0集合y0j0位。
6.第二次遍历,判断*q为假,则:*r=*p;p++;q++;r++;否则:q++;r++;
7.第二次遍历结束。得到密码c0。将c0写入密码文件,第一次加密结束。
第二轮加密
1.第一轮加密p指向c0集合z0i1位。
2.第一轮加密q指向p1集合y1j1位。
3.第一轮加密r指向c1集合z1k1位。
4.第一次遍历,判断*q为真,则:*r=*p;p++;q++;r++;否则:p++;q++;
5.第一次遍历结束。p指向c0集合z0i1位。q指向p0集合y1j1位。
6.第二次遍历,判断*q为假,则:*r=*p;p++;q++;r++;否则:p++;q++;
7.第二次遍历结束。得到密码c1。将c1写入密码文件,第二次加密结束。
加密方法4(p顺r散,p顺r散):
第一轮加密
1.第一轮加密p指向m集合xi0位。
2.第一轮加密q指向p0集合y0j0位。
3.第一轮加密r指向c0集合z0k0位。
4.第一次遍历,判断*q为真,则:*r=*p;p++;q++;r++;否则:q++;r++;
5.第一次遍历结束。r指向c0集合z0k0位。q指向p0集合y0j0位。
6.第二次遍历,判断*q为假,则:*r=*p;p++;q++;r++;否则:q++;r++;
7.第二次遍历结束。得到密码c0。将c0写入密码文件,第一次加密结束。
第二轮加密
1.第一轮加密p指向c0集合z0i1位。
2.第一轮加密q指向p1集合y1j1位。
3.第一轮加密r指向c1集合z1k1位。
4.第一次遍历,判断*q为真,则:*r=*p;p++;q++;r++;否则:q++;r++;
5.第一次遍历结束。r指向c1集合z1k1位。q指向p0集合y1j1位。
6.第二次遍历,判断*q为假,则:*r=*p;p++;q++;r++;否则:q++;r++;
7.第二次遍历结束。得到密码c1。将c1写入密码文件,第二次加密结束。
三、解密原理
取回加密初值i0,i1,j0,j1,k0,k1。
解密方法1(p散r顺,p散r顺):
第一轮解密
1.第一轮解密p指向c0集合z0i1位。
2.第一轮解密q指向p1集合y1j1位。
3.第一轮解密r指向c1集合z1k1位。
4.第一次遍历,判断*q为真,则:*p=*r;p++;q++;r++;否则:q++;p++;
5.第一次遍历结束。p指向c0集合z0i0位。q指向p0集合y1j1位。
6.第二次遍历,判断*q为假,则:*p=*r;p++;q++;r++;否则:q++;p++;
7.第二次遍历结束。得到第一次解密密码c0。将c0写入密码文件,第一次解密结束。
第二轮解密
1.第二轮解密p指向m集合xi0位。
2.第二轮解密q指向p0集合y0j0位。
3.第二轮解密r指向c0集合z0k0位。
4.第一次遍历,判断*q为真,则:*p=*r;p++;q++;r++;否则:q++;p++;
5.第一次遍历结束。p指向m集合xi0位。q指向p0集合y0j0位。
6.第二次遍历,判断*q为假,则:*p=*r;p++;q++;r++;否则:q++;p++;
7.第二次遍历结束。得到明码m。将m写入明文文件,解密结束。
加密方法2(p散r顺,p顺r散):
第一轮解密
1.第一轮解密p指向c0集合z0i1位。
2.第一轮解密q指向p1集合y1j1位。
3.第一轮解密r指向c1集合z1k1位。
4.第一次遍历,判断*q为真,则:*p=*r;p++;q++;r++;否则:q++;r++;
5.第一次遍历结束。r指向c1集合z1k1位。q指向p0集合y1j1位。
6.第二次遍历,判断*q为假,则:*p=*r;p++;q++;r++;否则:q++;r++;
7.第二次遍历结束。得到第一次解密密码c0。将c0写入密码文件,第一次解密结束。
第二轮解密
1.第一轮解密p指向m集合xi0位。
2.第一轮解密q指向p0集合y0j0位。
3.第一轮解密r指向c0集合z0k0位。
4.第一次遍历,判断*q为真,则:*p=*r;p++;q++;r++;否则:q++;p++;
5.第一次遍历结束。p指向m集合xi0位。q指向p0集合y0j0位。
6.第二次遍历,判断*q为假,则:*p=*r;p++;q++;r++;否则:q++;p++;
7.第二次遍历结束。得到明码m。将m写入明文文件,解密结束。
加密方法3(p顺r散,p散r顺):
第一轮解密
1.第一轮解密p指向c0集合z0i1位。
2.第一轮解密q指向p1集合y1j1位。
3.第一轮解密r指向c1集合z1k1位。
4.第一次遍历,判断*q为真,则:*p=*r;p++;q++;r++;否则:p++;q++;
5.第一次遍历结束。p指向c0集合z0i1位。q指向p0集合y1j1位。
6.第二次遍历,判断*q为假,则:*p=*r;p++;q++;r++;否则:p++;q++;
7.第二次遍历结束。得到第一次解密密码c0。将c0写入密码文件,第一次解密结束。
第二轮解密
1.第一轮解密p指向m集合xi0位。
2.第一轮解密q指向p0集合y0j0位。
3.第一轮解密r指向c0集合z0k0位。
4.第一次遍历,判断*q为真,则:*p=*r;p++;q++;r++;否则:q++;r++;
5.第一次遍历结束。r指向c0集合z0k0位。q指向p0集合y0j0位。
6.第二次遍历,判断*q为假,则:*p=*r;p++;q++;r++;否则:q++;r++;
7.第二次遍历结束。得到明码m。将m写入明文文件,解密结束。
加密方法4(p顺r散,p顺r散):
第一轮解密
1.第一轮解密p指向c0集合z0i1位。
2.第一轮解密q指向p1集合y1j1位。
3.第一轮解密r指向c1集合z1k1位。
4.第一次遍历,判断*q为真,则:*p=*r;p++;q++;r++;否则:q++;r++;
5.第一次遍历结束。r指向c1集合z1k1位。q指向p0集合y1j1位。
6.第二次遍历,判断*q为假,则:*p=*r;p++;q++;r++;否则:q++;r++;
7.第二次遍历结束。得到第一次解密密码c0。将c0写入密码文件,第一次解密结束。
第二轮解密
1.第一轮解密p指向m集合xi0位。
2.第一轮解密q指向p0集合y0j0位。
3.第一轮解密r指向c0集合z0k0位。
4.第一次遍历,判断*q为真,则:*p=*r;p++;q++;r++;否则:q++;r++;
5.第一次遍历结束。r指向c0集合z0k0位。q指向p0集合y0j0位。
6.第二次遍历,判断*q为假,则:*p=*r;p++;q++;r++;否则:q++;r++;
7.第二次遍历结束。得到明码m。将m写入明文文件,解密结束。
此项专利技术与以往技术相比,在流密码加密的过程中不需要专用的计算机硬件、专用的电子逻辑器件。更不需要逻辑电路的设计。不涉及混沌信号的反馈问题和反馈算法。完全是用计算机软件编程解决流密码的加密和解密过程。这样,明码的加密和解密的外界条件要求很低。只要有联网的计算机,就可进行加密和解密工作。本项技术具有很强的适用性。
本加密技术中,协议文件(密钥)的内容越长,其解密的难度越大。现有技术规范为32字节。也可加大到64字节和128字节。甚至更长。
以本技术的开发的软件产品,可应用到外交部门的信息传输,也可用于军事部门的信息传输,对于遥控、图像传输加密也具有良好的效果。由于破译的难度高,在明码保密期间要想破译,几乎是不可能事件。
上述加密过程为只取一个字节作为参照串。这样的加密容易被破解。但是,当参照串的字节为8、16、32甚至64字节时,其破译的难度可想而知。而参照串的长度可以明文的字节长度一样。即使顺字节,若能进行多次迭代。其破译难度也是相当的大。
由于现代通信技术的发展,增加一定量的传输代码,已经不是问题。
参考图2-5当位指针p及r的值不同时及具体实施例将明文“中国”进行加密解密的详解过程,其具体如下:
本方法是用双密钥加密,密钥可放在不同人手中,保证明文更加的安全。
1.m={“中国”}表示明文,即要加密的文本。{0xd6d00xb9fa}是“中国”两个汉字的机内码。为加密输入序列。
2.p0={“玫瑰”}表示一个密钥。{0xc3b50xb9e5}是“玫瑰”两个汉字的机内码。
3.p1={“牡丹”}表示另一密钥。{0xc4b50xb5a4}是“牡丹”两个汉字的机内码。
4.初值的选取i0=5,i1=3,j0=4,j1=6,k0=2,k1=1。
5.使用加密方法1,第一次加密获得密文c0={0x9cb7,0xf62c}。
6.使用加密方法1,第二次加密获得密文c1={0x5bb6,0x67c5}。
解密过程
说明:
1.取回初值i0=5,i1=3,j0=4,j1=6,k0=2,k1=1。
2.c1={0x5bb6,0x67c5}表示密文。
3.p1={“牡丹”}={0xc4b50xb5a4}是“牡丹”两个汉字的机内码。也是第二个密钥。
4.用p1密钥及解密方法1,得到c0={0x9cb7,0xf62c}这个第一次加密密文。
5.再使用p0={“玫瑰”}={0xc3b50xb9e5},将c0={0x9cb7,0xf62c}这个第一次加密密文还原到明文m={“中国”}={0xd6d00xb9fa}。
加密和解密算法
加密过程
1.明文文件m={“中国”}={0xd60xd00xb90xfa}=(11010110110100001011100011111010)2。
密钥文件p0={“玫瑰”}={0xc30xb50xb90xe5}=(11000011101101011011100011100101)2。
密钥文件p1={“牡丹”}={0xc40xb50xb50xa4}=(11000100101101011011010110100100)2。
2.建立字符指针char*p_str_m。
建立字符指针char*p_str_p0。
建立字符指针char*p_str_p1。
建立字符指针char*p_str_c0。
建立字符指针char*p_str_c1。
3.打开明文文件m,统计明文文件m的字节数,并存放到n中。
4.分配明文存储空间p_str_m=(char*)malloc(n*sizeof(char))。
分配密钥存储空间p_str_p0=(char*)malloc(n*sizeof(char))。
分配密钥存储空间p_str_p1=(char*)malloc(n*sizeof(char))。
分配密文存储空间p_str_c0=(char*)malloc(n*sizeof(char))。
分配密文存储空间p_str_c1=(char*)malloc(n*sizeof(char))。
5.取位初值i0=5,即从明文串m的第x05位(bit)开始。并保留该值。参看图2。
取位初值i1=3,即从密文串c0的第z03位(bit)开始。并保留该值。参看图2。
取位初值j0=4,即从密钥串p0的第y04位(bit)开始。并保留该值。参看图2。
取位初值j1=6,即从密钥串p1的第y16位(bit)开始。并保留该值。参看图2。
取位初值k0=2,即从密文串c0的第z02位(bit)开始。并保留该值。参看图2。
取位初值k1=1,即从密文串c1的第z11位(bit)开始。并保留该值。参看图2。
6.将明文文件m的内容,读入到p_str_m所指存储空间。并将p_str_m指向i0=5所在字节。当指针p_str_m指向该串尾标志,加密循环仍未结束,则将指针p_str_m指向该字符串首字节。
7.将密钥文件p0的内容,读入到p_str_p0所指存储空间。并将p_str_p0指向j0=4所在字节。当指针p_str_p0指向该串尾标志,加密循环仍未结束,则将指针p_str_p0指向该字符串首字节。
8.将密钥文件p1的内容,读入到p_str_p1所指存储空间。并将p_str_p1指向j1=6所在字节。当指针p_str_p1指向该串尾标志,加密循环仍未结束,则将指针p_str_p1指向该字符串首字节。
9.将密文指针p_str_c0指k=2初值位置。当指针p_str_c0指向该串尾标志,加密循环仍未结束,则将指针p_str_c0指向该字符串首字节。
10.将密文指针p_str_c1指k=1初值位置。当指针p_str_c1指向该串尾标志,加密循环仍未结束,则将指针p_str_c1指向该字符串首字节。
11.建立一个函数
intstring_read_bit(char*p,inti);
该函数返回p所指的字符串第i位(bit)的值(0,1)。
12.建立一个函数
voidstring_write_bit(char*p,inti,intj);
该函数将p所指的字符串第i位(bit),写入j的值(0,1)。
13.第一次循环
指针p_str_m,指向x05位所在字节。当遇到尾标志,回指首字节。
指针p_str_p0,指向y04位所在字节。当遇到尾标志,回指首字节。
指针p_str_c0,指向z02位所在字节。当遇到尾标志,回指首字节。
14.第二次循环
指针p_str_m,指向x05位所在字节。当遇到尾标志,回指首字节。
指针p_str_p0,指向y04位所在字节。当遇到尾标志,回指首字节。
指针p_str_c0,指向z02位所在字节。当遇到尾标志,回指首字节。
15.第三次循环
指针p_str_c0,指向z03位所在字节。当遇到尾标志,回指首字节。
指针p_str_p1,指向y16位所在字节。当遇到尾标志,回指首字节。
指针p_str_c1,指向z11位所在字节。当遇到尾标志,回指首字节。
16.第四次循环
指针p_str_c0,指向z03位所在字节。当遇到尾标志,回指首字节。
指针p_str_p1,指向y16位所在字节。当遇到尾标志,回指首字节。
指针p_str_c1,指向z11位所在字节。当遇到尾标志,回指首字节。
17.将p_str_c1指向分配的密文存储空间首地址,将该空间的n个字节写入到密文文件c中。
18.获得密文文件,c={“[謆”}={0x5bb60x67c5}=(01011011110101100110011111000101)2。
19.上述过程可靠参看图2所示。
解密过程
1.密文文件c={“[謆”}={0xe9670x633d}=(11011000010101100100110110111110)2。
密钥文件p0={“玫瑰”}={0xc30xb50xb90xe5}=(11000011101101011011100011100101)2。
密钥文件p1={“牡丹”}={0xc40xb50xb50xa4}=(11000100101101011011010110100100)2。
2.建立字符指针char*p_str_m。
建立字符指针char*p_str_p0。
建立字符指针char*p_str_p1。
建立字符指针char*p_str_c0。
建立字符指针char*p_str_c1。
3.打开密文文件c,统计密文文件c的字节数,并存放到n中。
4.分配明文存储空间p_str_m=(char*)malloc(n*sizeof(char))。
分配密钥存储空间p_str_p0=(char*)malloc(n*sizeof(char))。
分配密钥存储空间p_str_p1=(char*)malloc(n*sizeof(char))。
分配密文存储空间p_str_c0=(char*)malloc(n*sizeof(char))。
分配密文存储空间p_str_c1=(char*)malloc(n*sizeof(char))。
5.取回保留的位初值i0=5,即从明文串m的第x05位(bit)开始。并保留该值。
取回保留的位初值i1=3,即从密文串c0的第z03位(bit)开始。并保留该值。
取回保留的位初值j0=4,即从密钥串p0的第y04位(bit)开始。并保留该值。
取回保留的位初值j1=6,即从密钥串p1的第y16位(bit)开始。并保留该值。
取回保留的位初值k0=2,即从密文串c0的第z02位(bit)开始。并保留该值。
取回保留的位初值k1=1,即从密文串c1的第z11位(bit)开始。并保留该值。
6.将密文文件c(c1)的内容,读入到p_str_c1所指存储空间。并将p_str_c1指向k1=1所在字节。当指针p_str_c1指向该串尾标志,加密循环仍未结束,则将指针p_str_c1指向该字符串首字节。经第一解密后形成密文文件c0。
7.将密文文件c0的内容,读入到p_str_c0所指存储空间。并将p_str_c0指向k0=2所在字节。当指针p_str_c0指向该串尾标志,加密循环仍未结束,则将指针p_str_c0指向该字符串首字节。
8.将密钥文件p1的内容,读入到p_str_p1所指存储空间。并将p_str_p1指向j1=6所在字节。当指针p_str_p1指向该串尾标志,加密循环仍未结束,则将指针p_str_p1指向该字符串首字节。
9.将密钥文件p0的内容,读入到p_str_p0所指存储空间。并将p_str_p0指向j1=4所在字节。当指针p_str_p0指向该串尾标志,加密循环仍未结束,则将指针p_str_p0指向该字符串首字节。
10.将明文指针p_str_m指i=5初值所在字节。当指针p_str_m指向该串尾标志,加密循环仍未结束,则将指针p_str_m指向该字符串首字节。
11.建立一个函数
intstring_read_bit(char*p,inti);
该函返回p所指的字符串第i位(bit)的值(0,1)。
12.建立一个函数
voidstring_write_bit(char*p,inti,intj);
该函数将p所指的字符串第i位(bit),写入j的值。
13.第一次循环
指针p_str_c0,指向z03位所在字节。当遇到尾标志,回指首字节。
指针p_str_p1,指向y16位所在字节。当遇到尾标志,回指首字节。
指针p_str_c1,指向z11位所在字节。当遇到尾标志,回指首字节。
14.第二次循环
指针p_str_c0,指向z03位所在字节。当遇到尾标志,回指首字节。
指针p_str_p1,指向y16位所在字节。当遇到尾标志,回指首字节。
指针p_str_c1,指向z11位所在字节。当遇到尾标志,回指首字节。
15.第三次循环
指针p_str_m,指向x5位所在字节。当遇到尾标志,回指首字节。
指针p_str_p0,指向y04位所在字节。当遇到尾标志,回指首字节。
指针p_str_c0,指向z02位所在字节。当遇到尾标志,回指首字节。
16.第四次循环
指针p_str_m,指向x5位所在字节。当遇到尾标志,回指首字节。
指针p_str_p0,指向y04位所在字节。当遇到尾标志,回指首字节。
指针p_str_c0,指向z02位所在字节。当遇到尾标志,回指首字节。
17.将p_str_m指向分配的密文存储空间首地址,将该空间的n个字节写入到明文文件m中。
18.明文文件m={“中国”}={0xd60xd00xb90xfa}=(11010110110100001011100011111010)2。
图6所示为根据本发明实施方式的加密组合表。其包括:将明文集合m作为初值并进行迭代加密得到密文集合c的加密步骤包括四种失败加密方法、八种半加密方法及四种双密钥加密方法,舍弃所有失败加密方法和半加密方法并执行四种双密钥加密方法,其中四种双密钥加密方法包括根据循环链表的指针进行顺序加密。
此方法2次加密方式共有16种组合方式,2次加密全部成功的共有4种,2次加密全部失败的共有4种,2次加密仅有一次加密成功的共有8种,这8种对于二次加密没有任何意义,故舍弃,我们只申报2次加密全部成功的这4种方法,最后状态:"1"表示成功,"0"表示失败。
以上所述,只是本发明的较佳实施例而已,本发明并不局限于上述实施方式,只要其以相同的手段达到本发明的技术效果,都应属于本发明的保护范围。在本发明的保护范围内其技术方案和/或实施方式可以有各种不同的修改和变化。