1、二进制下因子分解分数一次一密的改进与实践二进制下因子分解分数一次一密的改进与实践一次一密是Gibert Vernam和Joseph Mauborgne大约在1918年发明的密码系统,其加密方法是一种简单易行的加密方式,但它的可攻破性很难,基本上是不可攻破的。因子分解分数加密是自己设计出的一种新的加密方法,通过对分子不同的分解,再在二进制下,利用分解的因子对给定的明文加密,可设计出多种方式加密,其可实现多次加密,保密性更强,且易操作,更难破解。这将是一篇有理论和实践意义的好的论文,对密码学和编程都有很好的实践作用。第一章主要介绍密码学的定义及发展前景,我们可以粗略地了解密码学的原理;第二章主要介
2、绍一次一密加密系统及其简单应用;第三章主要针对第二章一次一密加密方法进行了改进,增强信息的保密性,并通过C+程序得到验证。1.1 密码学的定义1研究信息的保密和复原保密信息以获取其真实内容的学科称为密码 学。它包括密码编码学和密码分析学。密码编码学是研究对信息进行编码,实现隐蔽信息的一门学科;密码分析学是研究复原保密信息或求解加密算法与密钥的学科。1.2密码学基本简介2密码学是研究如何隐密地传递信息的学科。在现代特别指对信息以及其传输的数学性研究,常被认为是数学和计算机科学的分支,和信息论也密切相关。著名的密码学者Ron Rivest解释道:“密码学是关于如何在敌人存在的环境中通讯”,自工程学
3、的角度,这相当于密码学与纯数学的异同。密码学是信息安全等相关议题,如认证、访问控制的核心。密码学的首要目的是隐藏信息的涵义,并不是隐藏信息的存在。密码学也促进了计算机科学,特别是在于电脑与网络安全所使用的技术,如访问控制与信息的机密性。密码学已被应用在日常生活:包括自动柜员机的芯片卡、电脑使用者存取密码、电子商务等等。1.3 密码学理论基础3在通信过程中,待加密的信息称为明文,已被加密的信息称为密文,仅有收、发双方知道的信息称为密钥。在密钥控制下,由明文变到密文的过程叫加密,其逆过程叫脱密或解密。4现代密码学所涉及的学科包括:信息论、概率论、数论、计算复杂性理论、近世代数、离散数学、代数几何学
4、和数字逻辑等。1.4密码学技术应用51. 数位签章(Digital Signature):6这是以密码学的方法,根据EDI讯息的内容和发信有该把私钥,任何人都无法产生该签名,因此比手写式的签名安全许多。收信人则以发信人的公钥进行数位签章的验证。72. 数位信封(Digital Envelope):8这是以密码学的方法,用收信人的公钥对某些机密资料进行加密,收信人收到后再用自己的私钥解密而读取机密资料。除了拥有该私钥的人之外, 任何人即使拿到该加密过的讯息都无法解密,就好像那些资料是用一个牢固的信封装好,除了收信人之外,没有人能拆开该信封。93. 安全回条:10收信人依据讯息内容计算所得到的回覆
5、资料,再以收信人的私钥进行数位签章后送回发信人,一方面确保收信人收到的讯息内容正确无误, 另一方面也使收信人不能否认已经收到原讯息。114. 安全认证:12每个人在产生自己的公钥之后,向某一公信的安全认证中心申请注册,由认证中心负责签发凭证(Certificate),以保证个人身份与公钥的对应性与正确性。第二章 一次一密2.1 一次一密定义13一次一密指在流密码当中使用与消息长度等长的随机密钥, 密钥本身只使用一次。14具体而言,首先选择一个随机位串作为密钥,然后将明文转变成一个位串,比如使用明文的ASCII表示法。最后,逐位计算这两个串的异或值,结果得到的密文不可能被破解,因为即使有了足够数
6、量的密文样本,每个字符的出现概率都是相等的,每任意个字母组合出现的概率也是相等的。这种方法被称为“一次一密”2.2 一次一密简介15一次一密是一种不可攻破的密码系统,是 Gilbert Vernam 和 Joseph Mauborgne大约在1918年发明的。首先选择一个随机位串作为密钥,然后将明文转变成一个位串,这可以通过将数表示成二进制来实现。最后,逐位计算这两个串的异或值,结果得到的密文是不可能被破解的。2.3 一次一密举例16给定一则信息,我们将信息表示成 :1010100101。异或规则:0+0=0,0+1=1,1+1=0。密钥是:1000100011,用如下方式得到密文:17(明文
7、) 101010010118(密钥)+ 100010001119(密文) 001000011020解密时用相同的密钥,只需要简单地将密文与密钥异或:0010000110+ 1000100011=1010100101。21如果加密的是一个字母的序列,可以这样做些改动。密钥是一个移位数的随机序列,每个数在025之间。解密时用相同的密钥,字母要向相反的方向移动。第三章 二进制下因子分解分数一次一密的改进与实践3.1.两次加密随机给定一则二进制信息和一个分数,取分数的分子的一种分解方式,将分解后的因子作为密钥,均按照一次一密的方法对信息进行两次加密。3.1.1两次加密理论指导随机给定一个分数A/B(A
8、、B均为正实数)及明文X,对于A至少有一种分解方式:A=A1*A2(A1、A2均为正实数),首先将A1和A2化为二进制数A11和A21,我们分别利用A11和A21按照一次一密的加密方法对明文X及加密后的信息加密,实现两次加密,使得原有信息更加安全,不可攻破。3.1.2两次加密实现方法将A1、A2分别表示成二进制数A11、A21,取A11、A21 、X中长度最长的作为密钥的长度L;在A11、A21这两个序列前加0直到分别达到长度L,得到新序列A12、A22;应用一次一密的加密方法A12+X得到A13,A13+ A22得到A23;那么明文X对应的密文即为A23,得到两次加密。从而在一次一密的基础上
9、,实现了因子分解分数的两次加密,使得原有信息更加安全,不可攻破。3.1.3两次加密举例取定分数156/7,明文101010。异或规则:0+0=0,0+1=1,1+1=0。 首先分解分子156:156=4*39。其次,4和39表示成二进制数分别是:100和100111 根据3.1.2实现方法确定密钥长度为:6为了与长度6一致,补0后序列分别是000100、100111(密钥)第一次加密:101010+000100=101110;第二次加密:101110+100111=001001解密时用相同的密钥只需要简单地做两个异或得到两个明文101010; 3.1.4 C+程序验证下面我基于3.1.4的例子
10、来设计一个程序:1#include 2using namespace std;3int main()45 int A,B,C,D,b=32,d=32,count1=0,count2=0,count3=0,max,i,n1,n2,n3;6 int a32=0,c32=0,a1count1,c1count2,M32=0,M1count3;7 int a2max,a3max;8 cout请依次输入分数的分子、分母!AB;10 cout给定分数:A/Bendl;11 cout请分解给定分数的分子,使得分子=C*D!CD;13 coutA=C*Dendl;14 do15 16 b-;17 ab=C%2;
11、18 C=(C-ab)/2;19 while (C!=0&b!=0);20 coutC的二进制形式:;21 for (b;b!=32;b+)22 23 coutab;24 count1+;25 26 cout C的二进制位数:count1endl;27 do28 29 d-;30 cd=D%2;31 D=(D-cd)/2;32 while (D!=0&d!=0);33 coutD的二进制形式:;34 for (d;d!=32;d+)35 36 coutcd;37 count2+;38 39 cout D的二进制位数:count2endl;40 for(i=0;icount1;i+)41 42
12、a1i=a32-count1+i;43 44 for(i=0;icount2;i+)45 46 c1i=c32-count2+i;47 48 /a1,c1分别为100,10011149 cout 请输入一串二进制明文:endl;50 for(i=0;iMi;53 count3+;54 55 for(i=0;icount2)?count1:count2;60 max=(maxcount3)?max:count3;61 cout密钥的长度为:maxendl;62 if(count3!=max)63 64 n3=max-count3;65 for(i=n3;imax;i+)66 67 M1i=M1i
13、-n3;68 69 for(i=0;in3;i+)70 71 M1i=0;72 73 74 if(count1!=max)75 76 n1=max-count1;77 for(i=n1;imax;i+)78 79 a1i=a1i-n1;80 81 for(i=0;in1;i+)82 83 a1i=0;84 85 for(i=0;imax;i+)86 87 if(a1i!=M1i)88 89 a2i=1;90 91 else92 93 a2i=0;94 95 96 97 else98 99 for(i=0;imax;i+)100 101 if(a1i!=M1i)102 103 a2i=1;104
14、 105 else106 107 a2i=0;108 109 110 111 for(i=0;imax;i+)112 113 couta1i;114 115 if(count2!=max)116 117 n2=max-count2;118 for(i=n2;imax;i+)119 120 c1i=c1i-n2;121 122 for(i=0;in2;i+)123 124 c1i=0;125 126 for(i=0;imax;i+)127 128 if(c1i!=a2i)129 130 a3i=1;131 132 else133 134 a3i=0;135 136 137 138 else139
15、 140 for(i=0;imax;i+)141 142 if(a1i!=M1i)143 144 a3i=1;145 146 else147 148 a3i=0;149 150 151 152 cout密文如下:endl;153 for(i=0;imax;i+)154 155 couta3i;156 157 return 0;3.2三次加密随机给定一则二进制信息和一个分数,取分数的分子的一种分解方式,并利用分解后的因子及分母作为密钥分别按照一次一密的方法对信息依次进行加密。3.2.1三次加密理论指导随机给定一个分数A/B(A、B均为正实数)及明文X(二进制信息),对于A至少有一种分解方式:A=
16、A1*A2(A1、A2均为正实数),首先将A1、A2、B化为二进制数A11、A21及B1,我们利用A11、A21和B1按照一次一密的加密方法对X及加密后的信息加密,实现三次加密,使得原有信息比两次加密更加安全,不可攻破。3.2.2三次加密实现方法将A1、A2 和B分别表示成二进制数A11、A21 和B1 ,取A11、A21 、B1 和X中长度最长的作为密钥的长度L;在A11、A21、B1 和X这三个序列前加0直到分别达到长度L,得到新序列A12、A22、B2 、X1;应用一次一密的加密方法A12+ X1得到X2,A22+ X2得到X3,B2+ X3得到X4;那么密文即为X4,得到三次加密。从而
17、在一次一密的基础上,实现了因子分解分数的三次加密,使得原有信息比两次加密更加安全,不可攻破。3.2.3三次加密举例取定分数156/7及明文101010,异或规则:0+0=0,0+1=1,1+1=0,在二进制下,对156/7实施三次加密。首先分解分子156:156=4*39。其次,4、39和7表示成二进制数分别是:100、100111和111。 根据3.1.3实现方法确定密钥长度为:6为了与长度6一致,4、39、7补0后序列分别是000100、100111和000111第一次加密:000100+101010=101110;第二次加密:101110+100111=001001:第三次加密:001001+000111=001110解密时用相同的密钥只需要简单地做三个异或便可以得到明文101010;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1