?? lockexp.cpp
字號:
//Lock programme stimulate in c lanuage
/* 可以用int atoi(char *)把字符串轉(zhuǎn)化為int,如atoi("1235"),但不能把float型的12.35轉(zhuǎn)化,字符串轉(zhuǎn)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)//密碼匹配函數(shù)
{
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) //糾錯函數(shù),用戶要求重新輸入
{
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)//開鎖函數(shù),對應(yīng)按鈕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); //將數(shù)字數(shù)組轉(zhuǎn)化為字符串
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); //將數(shù)字數(shù)組轉(zhuǎn)化為字符串
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相符時,跳出執(zhí)行下一環(huán)節(jié)
state=0;
do
{
printf("\nEnter your new pwd:\n");
for(i=0;i<n;++i)
scanf("%d",&buf[i]); //用buf數(shù)組存new password
Print(buf,n);
printf("\n");
printf("\nRepeated enter your pwd:\n");
for(i=0;i<n;++i)
scanf("%d",&newPwd[i]); //用repeat數(shù)組存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); //將數(shù)字數(shù)組轉(zhuǎn)化為字符串
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;
}
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -