C_Kurs_Lekt / C_III_семестр / 15_password_example
.pdf#include <stdio.h> #include <conio.h> #include <dos.h> #include <string.h>
int password(void);
int main()
{
password(); return 0;
}
//=================================================================== int password(void)
{
char pass[10]={0}; int i;
clrscr();
printf("Введите пароль: "); i=0;
fflush(stdin); while((pass[i]=getch())!='\r') {
printf("*");
i++;
fflush(stdin);
}
if( strcmp(pass,"Alla\r")!=0) { printf("\n\n Пароль неверный"); delay(1000);
return 0;
}
return 1;
}
#include <stdio.h> #include <conio.h> #include <dos.h> #include <string.h>
int password(void );
int main()
{// Пример простой защиты программы.
//Требуют ввода пароля для запуска //============================================
//В реальной программе этот фрагмент необходимо исключить.
//Данный фрагмент помогает "зашифровать пароль"
unsigned char spass[]="pasw1\r"; // фраза-пароль + '\r'-Enter int i=0;
clrscr();
printf( "\nparol: %s\n => в ASCII кодах:",spass); while (i< strlen(spass)) printf(" %3d", spass[i++]);
//
printf( "\n\"шифруем\" - поразрядное исключающее или (^)\n"); i=0; while (i< strlen(spass)) spass[i]= spass[i++]^130; printf( "\nsecret parol: %s\n => в ASCII кодах:",spass);
i=0; while (i< strlen(spass)) printf(" %3d", spass[i++]); // проверка "расшифровки" пароля
printf( "\n\n\"обратное преобразование\"" " - поразрядное исключающее или (^)\n");
i=0; |
while |
(i< |
strlen(spass)) |
spass[i]= spass[i++]^130; |
printf( "desecret parol: %s\n => в ASCII кодах:",spass); |
||||
i=0; |
while |
(i< |
strlen(spass)) |
printf(" %3d", spass[i++]); |
getch(); |
|
|
|
|
//конец фрагмента //================================================================
if( password() ) { clrscr();
printf ("Все попытки ввода пароля оказались неудачными\n" ); printf ("До свидания ... \n");
getch(); return 1 ;
}
clrscr();
printf ("Вы правильно ввели пароль, продолжаем работать ... \n"); getch();
return 0;
}
//=== Функция ввода пароля возвращает: 1 - пароль введен неверно
// |
0 - в противном случае |
int password(void) |
|
{ |
|
unsigned char |
pass_ori[6]={242, 227, 241, 245, 179, 143}; |
unsigned char |
pass[10]={0}; // максимальная длина пароля |
int popitka = |
3;// счетчик попыток ввода пароля |
int i, x, y; |
|
x=30; y=10; //координаты ввода пароля
clrscr(); |
|
while (popitka--) { |
|
_setcursortype(_NORMALCURSOR); |
|
gotoxy(x, y); |
|
printf(" |
"); |
gotoxy(x, y); |
|
printf("Введите пароль: "); |
|
i=0; |
|
fflush(stdin); |
|
while((pass[i]=getch())!='\r') { |
|
pass[i]=pass[i]^130; |
|
printf("*"); |
|
i++; |
|
fflush(stdin); |
|
} |
|
pass[i]=pass[i]^130; |
|
if( strcmp(pass, pass_ori)!=0) { |
|
_setcursortype(_NOCURSOR); |
|
gotoxy(x,y); |
|
printf("Пароль введен не верно |
"); |
delay(300); |
|
if (popitka) { |
|
gotoxy(x,y+3); |
|
printf("Повторите еще раз |
"); |
gotoxy(x,y+4); |
|
printf("У Вас осталось %1d попытки", popitka); getch();
}
else { break;
} // end if (popitka)
}
else { // if strcmp т.е. если пароли совпали _setcursortype(_NORMALCURSOR);
return 0;
}
} // end while (popitka--) _setcursortype(_NORMALCURSOR); return 1;
}
ПРИМЕР работы с программой: parol: pasw1
=> в ASCII кодах: 112 97 115 119 49 13 "шифруем" - поразрядное исключающее или (^)
secret parol: Єуёї│П
=> в ASCII кодах: 242 227 241 245 179 143
"обратное преобразование" - поразрядное исключающее или (^) desecret parol: pasw1
=> в ASCII кодах: 112 97 115 119 49 13