• 大小: 291KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-02
  • 语言: 其他
  • 标签: OTP  

资源简介

一次性口令机制鉴别流程 第一步:认证请求(用户名)。第二步:依据用户名,查找并发送挑战(R,N)。第三步:计算并发送应战(HN(PW‖R ))。第四步:计算应战HN (PW‖R ) 的散列值 。第五步:取出HN+1 (PW‖R ),H(HN (PW‖R))=HN+1 (PW‖R) ?

资源截图

代码片段和文件信息

#include “md5.h“
#include
#include
#include
#include
#include
using namespace std;

struct inf  //用户存储的信息结构
{
char uid[50]; //用户名
char answer[50]; //应答值
int r;   //随机数
int N;   //挑战值 
char password[50]; //密码
};

inf infor[300];  //最多有300个用户 

int n=0;       //全局变量n,用于表示是目前系统中用户数 

void init()    
{
char uid[50]answer[50]password[50];
    int Nrtemp;
fstream file; 
file.open(“lib.txt“ios::in);
if(!file);
else
{
while(file>>uid>>answer>>r>>N>>password)     //将文件中的uid、answer、r、N、password赋值给结构体 
{
strcpy(infor[n].uiduid);
strcpy(infor[n].answeranswer);
infor[n].r=r;
infor[n].N=N;
strcpy(infor[n].passwordpassword);

//cout< n++;
}
}
file.close();
}

void reg()      //用户注册 
{
char uid[50]password1[50]password2[50]ans[100]={0}answer[50];
int Nritemp;
while(1)   
{
cout<<“请输入用户名: “;
cin>>uid;

for(i=0;i if(strcmp(infor[i].uiduid)==0)
{
cout< break;
}
if(i==n) break;   //如果没有用户名不重复,则下一步 
}
while(1)
{
cout<<“请输入密码: “;
cin>>password1;
cout<<“请再次输入密码: “;
cin>>password2;
if(strcmp(password1password2)==0)   break;
else
{
cout< }
}
srand(time(0));
r=rand();
infor[n].r=r;  //相当于服务器给用户一个随机数r 

N=rand()%999/11; 
infor[n].N=N; //相当于服务器给用户一个挑战值N 

//N=3;  //用于测试 
//infor[n].N=N; 
                       
i=0; 
temp=r;
 while(temp!=0)
{
i++;
temp/=10;
}

    while(r!=0)
{
i--;
ans[i]=r%10+‘0‘;
r/=10;
}

strcat(anspassword1);  //将r与password拼接  

for(i=0;i {
strcpy(ansMD5String(ans));  //计算n次数的md5值 


strcpy(answerMD5String(ans)); // 再进行一次md5存放在answer中
strcpy(infor[n].uiduid);
strcpy(infor[n].answeranswer);
strcpy(infor[n].passwordpassword1);
n++;

cout< system(“pause“);
system(“cls“);
}

void check()    //身份认证 
{
char uid[50]answer[50]ans[100]={0}password[50];
int Nrijtemp;
char ch;
cout<<“请输入用户名: “;
cin>>uid;
for(i=0;i {
if(strcmp(infor[i].uiduid)==0)
{
cout<<“随机数r为: “< cout<<“挑战值N为: “< cout<<“是否返回进行应答值计算(y/n): “;
cin>>ch;
if(ch==‘y‘) cout<
else if(ch==‘n‘)
{
cout<<“请输入应答值: “;
cin>>answer;
if(strcmp(MD5String(answer)infor[i].answer)==0)
{
printf(“\n“);
cout<<“认证通过!“;  
printf(“\n“);
strcpy(infor[i].answeranswer);
infor[i].N=infor[i].N-1; 

fstream f;
f.open(“lib.txt“ios::out);
    for(j=0;j     {
     f<

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件        354  2019-04-02 18:50  一次性口令\lib.txt

     文件        792  2019-05-08 21:45  一次性口令\Makefile.win

     文件       8210  2019-04-01 18:45  一次性口令\md5.h

     文件       6274  2019-04-02 18:42  一次性口令\OTP.cpp

     文件       1008  2019-04-01 19:58  一次性口令\OTP.dev

     文件    1367409  2019-05-08 21:45  一次性口令\OTP.exe

     文件        192  2019-05-09 22:03  一次性口令\OTP.layout

     文件      70655  2019-04-02 18:42  一次性口令\OTP.o

     目录          0  2019-05-10 12:31  一次性口令

----------- ---------  ---------- -----  ----

              1454894                    9


评论

共有 条评论