⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lockexp.cpp

📁 基于ARM7的密码锁程序
💻 CPP
字号:
//Lock programme stimulate in c lanuage
/* 可以用int atoi(char   *)把字符串转化为int,如atoi("1235"),但不能把float型的12.35转化,字符串转int可以用itoa(int,char*,int).*/
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>


#include "md5.h"//MD5加密程序的头文件
#define SIZE 6
#include <conio.h>//控制台读取字符的头文件
#include <string.h>

int storePwd[SIZE];
int enterPwd[SIZE];
unsigned char convert[SIZE+1];



void menu(void)//人机对话界面
{

	printf("\n\n--------------------------------------------\n");
	printf("Notice:default pwd is 000000\n");
	printf("Choose the number you want to run below:\n\n");
	printf("1 Enter Password to unlock\n");
	printf("2 Change Password\n");
	printf("3 Find your Password(If you forget the former one)\n");
	printf("4 Return to the menu\n");
    printf("--------------------------------------------\n");
}
int FixPwd(int *store,int *enter,int n)//密码匹配函数
{
	int state=1,i;
	for(i=0;i<n;++i)
	{
		if(store[i]!=enter[i])
		{
			state=0;
			break;
		}
	}
	return state;
}

void Print(int *prt,int n)//通过加密并且打印*
{
	int i;
	printf("Now your enterPwd is:");
	for(i=0;i<n;++i)
		printf("*");
	printf("\n");
}

void Cancle(int *enter,int n)                                  //纠错函数,用户要求重新输入
{
  int i;
  for(i=0;i<n;++i)
	  enter[i]=0;
  printf("Please enter your password to unlock:\n");
  for(i=0;i<n;++i)
	  scanf("%d",&enter[i]);


}

void Turn2str(int s[], unsigned char c[], int size)
{
int* ps=s;
unsigned char* pc=c;
while(ps!=s+size)
{
 *pc++ = '0'+*ps++;
}
}

void MD5(unsigned char *string)
{
    unsigned char digest[16];
    unsigned int len = 7;
    MD5_CTX context;
    MD5_CTX();
    context.MD5Update(string,len);
	context.MD5Final(digest);
    printf ("MD5 (\"%s\") = ",string);
	context.MDPrint (digest);
    printf ("\n");

}

void DefPwd(int *store,int *enter,int n)//开锁函数,对应按钮1
{   
	char ch='\0';
	int i,state,cnt=0;
	printf("Please enter your password to unlock:\n");
	getchar();
	for(i=0;i<n;++i)
	{
	  scanf("%d",&enter[i]);
	  if(enter[i]==10)
	  {
		  Cancle(enter,n);
	      break;//跳出,再次回到正常步骤
	  }
	}
	Print(enter,n);
	printf("\n\n");
	state=FixPwd(store,enter,n);
	if(state)
	{   	
		    Turn2str(storePwd,convert,SIZE);             //将数字数组转化为字符串
	        printf("The string is \"%s\"\n",convert);
            MD5(convert);
		    printf("Unlocked now!\n\n");
	}
	else
	{
		
		while(cnt<3)
		{  
		   ++cnt;
		   printf("Wrong password! Please enter again: \n");
	       for(i=0;i<n;++i)
	         scanf("%d",&enter[i]);
            Print(enter,n);
	        printf("\n\n");
	        state=FixPwd(store,enter,n);
	       if(state)
		   {
            Turn2str(storePwd,convert,SIZE);             //将数字数组转化为字符串
	        printf("The string is \"%s\"\n",convert);
            MD5(convert);
			   printf("Unlocked now!\n\n");
			   break;
		   }

		}
       if(cnt>=3)
	   {
		printf("You have enter too many times!\n");
	   }
		return;
			
		
	}
}

void FindPwd(int *store,int n)
{  
   char ID[19]="440301198505294819";
   char enter[19];
   int state,i;
   printf("Please enter your ID number to find your Pwd:\n");
   for(i=0;i<18;++i)
   {
	   enter[i]=getch();
	   putch('*');
   }
   enter[18]='\0';
   state=strcmp(ID,enter);
   printf("\n");
   if(!state)
   {
	   printf("Congratulatrions!\n");
	   printf("Your Password is : ");
	   for(i=0;i<n;++i)
		   printf("%d",store[i]);
	   printf("\n");
   }
   else
	   printf("Error.EXIT!\n");

}
void ChangePwd(int *oldPwd,int *newPwd,int n)
{
	int buf[SIZE];
	int i,state=0;
	do
	{
	printf("Enter your previous pwd:\n");
	for(i=0;i<n;++i)
		scanf("%d",&buf[i]);
	state=FixPwd(oldPwd,buf,n);                 //比较和原来的密码是否相符
	}while(!state);                             //state=1相符时,跳出执行下一环节
    state=0;                              
	do
	{ 
      printf("\nEnter your new pwd:\n");
	  for(i=0;i<n;++i)
		  scanf("%d",&buf[i]);                  //用buf数组存new password
	  Print(buf,n);
	  printf("\n");
	  printf("\nRepeated enter your pwd:\n");
	  for(i=0;i<n;++i)
		  scanf("%d",&newPwd[i]);              //用repeat数组存enter password
	  Print(newPwd,n);
	  state=FixPwd(buf,newPwd,n); 
	  if(state)
		  printf("\nNow your password has changed.\n");
	}while(!state);
	for(i=0;i<n;++i)
		oldPwd[i]=newPwd[i];
	Turn2str(oldPwd,convert,SIZE);             //将数字数组转化为字符串
	printf("The string is \"%s\"\n",convert);
    MD5(convert);
}



void main()
{   
	int i,in;
    menu();
	while(1)
	{   
        scanf("%d",&in);
		switch(in)
		{
		case 1:
			DefPwd(storePwd,enterPwd,SIZE);
			Sleep(3000);//延时在清屏
			system("cls");
			menu();
			break;
		case 2:
			ChangePwd(storePwd,enterPwd,SIZE);
			printf("Now the password is:");
			for(i=0;i<SIZE;++i)
				printf("%d",storePwd[i]);
			printf("\n");
            Sleep(3000);//延时在清屏
			system("cls");
			menu();
			break;
		case 3:
			FindPwd(storePwd,SIZE);
            Sleep(3000);//延时在清屏
			system("cls");
			menu();
			break;
		case 4:
			system("cls");
			menu();
			break;
		default:
			printf("Exit!\n");
			return;
		}
	}



}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -