RSA.cpp
#include
#include
#include
#include
#include
using namespace std;
int prime[1305];//存放素数
int p[10005];//用筛选法求素数
void PRIME(){
int i,i2,k;
for(i=0;i<=10000;i+=2)
p[i]=0;
for(i=1;i<=10000;i+=2)
p[i]=1;
p[2]=1;p[1]=0;
for(i=3;i<=100;i+=2){
if(p[i]==1){
i2=i+i;
k=i2+i;
while(k<=10000){
p[k]=0;
k+=i2;
}
}
}
prime[0]=1;
prime[1]=2;
for(i=3;i<=10000;i+=2)
if(p[i])
prime[++prime[0]]=i;
}
// 计算逆元素
__int64 mod(__int64 a,__int64 n){
return (a%n+n)%n;
}
void gcd(__int64 a,__int64 b,__int64 &d,__int64 &x,__int64 &y){
if(b==0)
{
d=a;
x=1;
y=0;
return;
}
gcd(b,a%b,d,y,x);
y-=x*(a/b);
}
//a-1 mod n
__int64 Inv(__int64 a,__int64 n){ // 计算逆元素
__int64 d,x,y;
gcd(a,n,d,x,y);
if(d==1)
return mod(x,n);
else
return -1;
}
//求两个数的最大公约数
__int64 GCD(__int64 n,__int64 m){
__int64 t,r;
if(n<m){
t=n;
n=m;
m=t;
}
while((r=n%m)!=0){
n=m;
m=r;
}
return m;
}
//x=a^b(mod n)
__int64 ModPow(__int64 a,__int64 b,__int64 n){
__int64 d=1,i=0;
while(b>=(1<<i)) i++;
for(--i;i>=0;--i){
d=d*d%n;
if(b&(1<<i))
d=d*a%n;
}
return d;
}
int main(){
__int64 i,e,d,n,st,ed,eula;
__int64 m,c,ans;
PRIME();
printf("素数的个数:%d\n",prime[0]);
printf("选择两个不同的素数(输入编号,空格隔开):\n");//47和71分别是第15个和20个
while(scanf("%I64d%I64d",&st,&ed)!=EOF){
printf("你选择的两个素数分别是:%d和%d\n",prime[st],prime[ed]);
n=prime[st]*prime[ed];
printf("计算得到N是%I64d\n",n);
//N的Eula数
eula=(prime[st]-1)*(prime[ed]-1);
//找一个与eula互质的数
for(i=2;i<eula;i++)
if(GCD(eula,i)==1){
e=i;
break;
}
//e=79;
//上面找到了公开密钥n--e
d=Inv(e,eula);
//上面找到了私密钥n--d
printf("生成公钥:(%I64d %I64d)\n",e,n);
//输出密钥
printf("生成私钥:(%I64d %I64d)\n",d,n);
//切忌加密的数要比n小
printf("请输入要加密的数(\n ");
scanf("%I64d",&m);
c=ModPow(m,e,n);
printf("通过计算%I64d^%I64d(mod %I64d)得到密文=%I64d\n",m,e,n,c);
ans=ModPow(c,d,n);
printf("通过计算%I64d^%I64d(mod %I64d)得到明文=%I64d\n",c,d,n,ans);
printf("素数的个数:%d\n",prime[0]);
printf("选择两个不同的素数(输入编号,空格隔开):\n");//47和71分别是第15个和20个
}
return 0;
}
生成的d和e验证公式d×e ≡ 1 (mod (p-1)(q-1)
RSA-Tool
利用RSA算法实现对称密钥的安全分配
- A准备一些文字(信件),选择一个密钥利用DES-Tool对文字进行加密得到密文1。
- B运行RSA-Tool,生成公钥和私钥,将公钥发送给A,私钥自己留存。
- A利用B的公钥对加密信件时使用的对称密钥进行加密,得到密文2。将密文1和密文2一同发送给B。
- B首先用自己的私钥解密密文2,接着利用解密密文2得到的对称密钥在DES-Tool中解密密文1,得到原始文字内容。
实训目的
了解认证技术的几种方式。
掌握口令认证的主要方法。
理解生物认证的应用前景。
实训准备及注意事项
1.硬件:装有Windows *** 作系统的计算机1台。
2.软件:弱口令爆破工具、C/C++编译环境、SQLServer2012、MyEclipse。
3.关键程序代码和实验结果以截图的形式进行保留。
实训任务1密码与账户锁定策略
1.搜索gpedit.msc或组策略并打开组策略编辑器。
2.在计算机配置-安全设置中打开账户策略。
3.在密码策略中对口令进行如下设置:
(1)开启密码必须符合复杂性要求
(2)设置密码长度不少于6个字符
(3)设置密码最长使用期限为30天
(4)设置强制密码历史数为3
4.通过测试观察上述密码策略的效果
5.在账户锁定策略中进行如下设置:
(1)设置账户锁定阈值为5次
(2)设置账户锁定时间为30分钟
(3)设置重置账户锁定计数器时间为30分钟
6.通过测试观察上述账户锁定策略的效果
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)