金融信息安全实训-03

金融信息安全实训-03,第1张

课堂笔记 实训任务3 公钥加密算法

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算法实现对称密钥的安全分配

  1. A准备一些文字(信件),选择一个密钥利用DES-Tool对文字进行加密得到密文1。
  2. B运行RSA-Tool,生成公钥和私钥,将公钥发送给A,私钥自己留存。
  3. A利用B的公钥对加密信件时使用的对称密钥进行加密,得到密文2。将密文1和密文2一同发送给B。
  4. B首先用自己的私钥解密密文2,接着利用解密密文2得到的对称密钥在DES-Tool中解密密文1,得到原始文字内容。
实训4 身份认证与口令加密

实训目的
了解认证技术的几种方式。
掌握口令认证的主要方法。
理解生物认证的应用前景。
实训准备及注意事项
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.通过测试观察上述账户锁定策略的效果

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/713592.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-24
下一篇 2022-04-24

发表评论

登录后才能评论

评论列表(0条)

保存