一次性口令设计(环境:vc++6.0)

1、一次性口令设计

口令攻击常常作为黑客目标攻击的开始,一旦黑客获取了目标机上的用户口令,就可以进入目标计算机,对目标机造成严重的安全威胁。

一次性口令是增强口令安全的有效方法之一。其主要设计思想是:设计一种动态生成口令的算法,使生成的口令只能使用一次,当再次使用时,该口令无效。从而有效地避免了基于口令破解的口令攻击。

2、 算法设计

    可以通过以下两种方式设计算法

(1)数学计算式

    选定一个数学计算式(函数),系统提供该函数的一个变量,用户计算并返回函数值,按照用户的响应判断其真实性。

     e.g.1: f(x)=x+1

     系统提示x,用户输入x+1

(2)字符串组合式

     选定一个字符串组合式,系统提供特征字符串,用户根据组合方式返回字符串,系统按照用户的响应判断其真实性。

     e.g.2: f(a1a2a3a4a5a6)=a1a3a4a6

     系统提供特征串:Friend

     用户变换此字符串为:Fied

     输入后进行口令认证。

具体设计内容:

  1. 编写一个一次性口令程序
  2. 运行该口令程序,屏幕上弹出一个仿Windows窗口,提示用户输入口令,并给出提示模式。
  3. 用户输入口令,按照一次性算法计算比较,符合,给出合法用户提示;否则给出非法用户提示。
  4. 再一次运行口令程序,如果输入与第一次同样的口令,系统应当拒绝,提示非法用户。每次提示和输入的口令都是不一样的。

写出设计说明(含公式、算法,随机数产生法,函数调用和参数传递方式)

思路:先写出一次性口令程序,再将其放置在系统启动程序中。

全部代码如下:

#include<time.h>
#include<stdlib.h>
#include<stdlib.h>
#include<iostream>
#include<string.h>
#include<windows.h>
void function1(){//数字运算器
	int i,j,y,m;
	time_t t;
	srand((unsigned)time(&t));
	i=rand()%1000;
	j=rand()%10+1;
	y=i+j;
	printf("系统提示:y=%d+%d\n",i,j);
	printf("请输入y值:");
	scanf("%d",&m);
	if(m==y)
	{MessageBox(NULL,"合法用户!验证通过!","用户验证",MB_OK);
	printf("合法用户!\n");}
	else
	{MessageBox(NULL,"非法用户!验证通过!","用户验证",MB_OK);
	printf("非法用户输入!!\n");}
}
void function2(){//随机字符运算器
	char a[10];
	char b[9];
	char c[9];
	int i,s,m=0;
	time_t t;
	srand((unsigned)time(&t));
	s=rand()%9;
	for(i=0;i<10;i++)
		a[i]=rand()%26+'a';
	for(i=0;i<9;i++)
	{
		if(i<s-1)
			b[i]=a[i];
		else
			b[i]=a[i+1];
	}
	printf("系统提示特征串为:\n");
	for(i=0;i<10;i++)
		printf("%c",a[i]);
	printf("\n特征组合为:消去%d值:\n",s);
	for(i=0;i<9;i++)
		scanf("%c",&c[i]);
	if(b[0]==c[0]&&b[1]==c[1]&&b[2]==c[2]&&b[3]==c[3]&&b[4]==c[4]&&b[5]==c[5]&&b[6]==c[6]&&b[7]==c[7]&&b[8]==c[8])
	{MessageBox(NULL,"合法用户!验证通过!","用户验证",MB_OK);
	printf("合法用户!\n");}
	else
	{MessageBox(NULL,"非法用户!验证通过!","用户验证",MB_OK);
	printf("非法用户输入!!\n");}
}
int main(){
	int i;
list:printf("选择一个一次口令运算器:\n1.加法运算器\n2.字符串运算器\n3.结束\n");
	 scanf("%d",&i);
	 getchar();
	 switch(i)
	 {
	 case 1:function1();
		 goto list;
	 case 2:function2();
		 goto list;
	 case 3:exit(1);
	 }
	 return 0;
}

实现效果如下:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值