通信安全Word文件下载.docx
- 文档编号:7423365
- 上传时间:2023-05-08
- 格式:DOCX
- 页数:13
- 大小:91.34KB
通信安全Word文件下载.docx
《通信安全Word文件下载.docx》由会员分享,可在线阅读,更多相关《通信安全Word文件下载.docx(13页珍藏版)》请在冰点文库上搜索。
intmain()
{
chara[100];
while(gets(a))
intt=strlen(a);
for(inti=0;
i<
t;
i++)
if((a[i]>
='
d'
&
a[i]<
z'
)||(a[i]>
D'
Z'
))
a[i]=(char)(a[i]-3);
}
elseif((a[i]>
a'
c'
A'
C'
a[i]=(char)(a[i]+23);
printf("
%s\n"
a);
return0;
1.3运行结果
2Vigenere密码算法
2.1Vigenere密码算法原理
Vigenere的密码中,发件人和收件人必须使用同一个关键词(或者同一文字章节),这个关键词或文字章节中的字母告诉他们怎么样才能前后改变字母的位置来获得该段信息中的每个字母的正确对应位置。
比如如果关键字“BIG”被使用了,发件人将把信息按三个字母的顺序排列。
第一个三字母单词的第一个字母将应当向后移动一个位置(因为B是排在A后面的字母),第二个字母需要向后移动8位(I是A后面第8个字母),而第三个字母需要向后移动6位(G是A后面第6个字母)。
2.2Vigenere密码算法流程
2.3Vigenere密码代码实现
#include<
iostream>
string>
usingnamespacestd;
constintN=26;
charv[N][N]={{'
'
B'
E'
F'
G'
H'
I'
J'
K'
L'
M'
N'
O'
P'
Q'
R'
S'
T'
U'
V'
W'
X'
Y'
}};
intnumber(charx)//把行号字母对应到数字
{
chary='
;
N;
if(x==(y+i))returni;
}
voidencryption(stringm,stringk)//加密
cout<
<
"
明文:
cin>
>
m;
密钥:
k;
intmlen,klen;
mlen=m.length();
klen=k.length();
char*p,*q,*t;
//明文,初始密钥,密钥串。
把string换成char
p=newchar[m.length()+1];
strcpy(p,m.c_str());
q=newchar[k.length()+1];
strcpy(q,k.c_str());
t=newchar[m.length()+1];
intj=0;
mlen;
t[i]=q[j];
j++;
j=j%klen;
}//生成密钥
密文:
for(i=0;
v[number(t[i])][number(p[i])];
endl;
voiddisencryption(stringc,stringk)//解密
c;
intclen,klen;
clen=c.length();
//密文,初始密钥,密钥串。
p=newchar[c.length()+1];
strcpy(p,c.c_str());
t=newchar[c.length()+1];
clen;
for(intj=0;
j<
j++)
if(v[number(t[i])][j]==p[i]){cout<
char(j+97);
break;
intmain()
for(inti=1;
j++)
v[i][j]=v[i-1][(j+1)%N];
}//方阵初始化
欢迎使用维吉尼亚加密!
endl<
请选择要进行的操作"
intflag;
do{
1.加密2.解密3.结束:
flag;
stringm,k;
if(flag==1)encryption(m,k);
elseif(flag==2)disencryption(m,k);
elseif(flag!
=1&
flag!
=2&
=3)cout<
输入错误,请重新输入!
}while(flag!
=3);
2.3Vigenere密码代码运行结果
3RSA算法
3.1算法原理
RSA加密算法是在1977年开发的,是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的所有密码攻击,已被ISO推荐为公钥数据加密标准。
RSA算法基于一个十分简单的数论事实:
将两个大素数相乘十分容易,但那时想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。
在RSA算法中,我们先要获得两个不同的质数P和Q做为算法因子,再找出一个正整数E,使得E与
(P-1)*(Q-1)
的值互质,这个E就是私钥。
找到一个整数D,使得(E*D)mod((P-1)*(Q-1))=1成立,D就是公钥1。
设N为P和Q的乘积,N则为公钥2。
加密时先将明文转换为一个或一组小于N的整数I,并计算ID
modN的值M,M就密文。
解密时将密文ME
modN,也就是M的E次方再除以N所得的余数就是明文。
因为私钥E与(P-1)*(Q-1)互质,而公钥D使(E*D)mod((P-1)*(Q-1))=1成立。
破解者可以得到D和N,如果想要得到E,必须得出(P-1)*(Q-1),因而必须先对N进行因数分解。
如果N很大那么因数分解就会非常困难,所以要提高加密强度P和Q的数值大小起着决定性的因素。
一般来讲当P和Q都大于2128时,按照目前的机算机处理速度破解基本已经不大可能了。
(1)费马小定理:
有N为任意正整数,P为素数,且N不能被P整除,则有NP
modP=N
(2)积模分解公式有X、Y和Z三个正整数,且X*Y大于Z,则有:
(X*Y)modZ=((XmodZ)*(YmodZ))modZ
(3)有P和Q两个互质数,如果有XmodP=0,XmodQ=0,则有:
XmodPQ=0
(4)有P和Q两个互质数,设有整数X和Y满足YmodP=X,YmodQ=X,则有:
YmodPQ=X
(5)有P和Q两个互质数,设有整数X和Y满足YmodPQ=X
,则有:
YmodP=X,YmodQ=X
(6)
RSA定理:
:
若P和Q是两个相异质数,另有正整数R和M,其中M的值与(P-1)(Q-1)的值互质,并使得(RM)mod(P-1)(Q-1)=1。
有正整数A,且A<
PQ,设C=AR
modPQ,B=CM
modPQ则有:
A=B
3.2密钥生成
RSA算法是一种非对称密码算法,所谓非对称,,使用其中一个加密,则需要用另一个才能解密。
RSA的算法涉及三个参数,n、e1、e2。
其中,n是两个大质数p、q的积,n的二进制表示时所占用的位数,就是所谓的密钥长度。
e1和e2是一对相关的值,e1可以任意取,但要求e1与(p-1)*(q-1);
再选择e2,要求(e2*e1)mod((p-1)*(q-1))=1。
(n,e1),(n,e2)就是密钥对。
其中(n,e1)是公共密钥,(n,e2)为私钥。
RSA加解密的算法完全相同,设A为明文,B为密文,则:
A=B^e2modn;
B=A^e1modn;
(公钥加密体制中,一般用公钥加密,私钥解密)
e1和e2可以互换使用,即:
A=B^e1modn;
B=A^e2modn;
3.3代码实现
C源程序
intcandp(inta,intb,intc)//数据处理函数,实现幂的取余运算
{intr=1;
b=b+1;
while(b!
=1)
r=r*a;
r=r%c;
b--;
printf("
%d\n"
r);
returnr;
intfun(intx,inty)//公钥e与t的互素判断
intt;
while(y)
t=x;
x=y;
y=t%y;
if(x==1)
return0;
//x与y互素时返回0
else
return1;
//x与y不互素时返回1
voidmain()
intp,q,e,d,m,n,t,c,r;
请输入两个素数p,q:
"
);
scanf("
%d%d"
&
p,&
q);
n=p*q;
计算得n为%3d\n"
n);
t=(p-1)*(q-1);
//求n的欧拉数
计算得t为%3d\n"
t);
请输入公钥e:
%d"
e);
if(e<
1||e>
t||fun(e,t))
e不合要求,请重新输入:
//e<
1或e>
t或e与t不互素时,重新输入
d=1;
while(((e*d)%t)!
=1)d++;
//由公钥e求出私钥d
经计算d为%d\n"
d);
加密请输入1\n"
//加密或解密选择
解密请输入2\n"
r);
switch(r)
case1:
请输入明文m:
//输入要加密的明文数字
m);
c=candp(m,e,n);
密文为%d\n"
c);
case2:
请输入密文c:
//输入要解密的密文数字
c);
m=candp(c,d,n);
明文为%d\n"
m);
3.4RSA的安全性与破解
在RSA密码应用中,公钥KU是被公开的,即e和n的数值可以被第三方窃听者得到。
破解RSA密码的问题就是从已知的e和n的数值(n等于pq),想法求出d的数值,这样就可以得到私钥来破解密文。
从上文中的公式:
d≡e-1(mod((p-1)(q-1)))或de≡1(mod((p-1)(q-1)))我们可以看出。
密码破解的实质问题是:
从Pq的数值,去求出(p-1)和(q-1)。
换句话说,只要求出p和q的值,我们就能求出d的值而得到私钥。
当p和q是一个大素数的时候,从它们的积pq去分解因子p和q,这是一个公认的数学难题。
比如当pq大到1024位时,迄今为止还没有人能够利用任何计算工具去完成分解因子的任务。
因此,RSA从提出到现在已近二十年,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一。
然而,虽然RSA的安全性依赖于大数的因子分解,但并没有从理论上证明破译RSA的难度与大数分解难度等价。
即RSA的重大缺陷是无法从理论上把握它的保密性能如何。
此外,RSA的缺点还有:
A)产生密钥很麻烦,受到素数产生技术的限制,因而难以做到一次一密。
B)分组长度太大,为保证安全性,n至少也要600bits以上,使运算代价很高,尤其是速度较慢,较对称密码算法慢几个数量级;
且随着大数分解技术的发展,这个长度还在增加,不利于数据格式的标准化。
因此,使用RSA只能加密少量数据,大量的数据加密还要靠对称密码算法。
3.5RSA算法的用途
RSA的运算速度慢,所以很少用于对文件的加解密,在保密信道中常用于对会话秘钥的加密。
RSA主要用于PKI身份认证系统,详细说有数字证书、数字签名、数字签章、数字水印、数字信封等。
目前最贴近生活的一些案例如:
银行的u盾、银行卡的刷卡机、淘宝和12306的数字证书。
另外现在随着电子商务电子政务的铺开,登陆认证权限管理越来越贴近生活,RSA的空间越来越大。
当然RSA也有着一些问题,虽然有PKCS系列标准框架罩着,仍然有黑客活动的空间,如前一段时间公布的13分钟破解RSA。
现在商业的前沿已经开始着手用ECC算法来替代RSA,重构人们的密码生活。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 通信 安全
![提示](https://static.bingdoc.com/images/bang_tan.gif)