#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <openssl/sha.h>
enum userInputNum {
input_SignUp = 1,
input_Login = 2,
input_Exit = 4,
input_Admin = 3
};
struct Member {
char username[50];
char password[50];
char password_hash[50];
char checkPassword[50];
};
struct Member members[100];
int memberCount = 0;
void clearInputBuffer() {
int c;
while((c = getchar()) != '\n' && c != EOF);
}
void signUp();
void login();
void displayMenu();
void userList();
//void hashPassword(const char *password, char *hashedPassword);
/*void hashPassword(const char *password, char *hashedPassword) {
unsigned char hash[SHA256_DIGEST_LENGTH];
SHA256_CTX sha256;
SHA256_Init(&sha256);
SHA256_Update(&sha256, password, strlen(password));
SHA256_Final(hash, &sha256);
for (int i; i < SHA256_DIGEST_LENGTH; i++) {
sprintf(hashedPassword + (i * 2), "%02x", hash[i]);
}
hashedPassword[64] = '\0';
}*/
int main() {
int choice;
do {
displayMenu();
printf("숫자를 입력해주세요: ");
scanf("%d", &choice);
enum userInputNum UserInputNum = choice;
clearInputBuffer();
switch(UserInputNum) {
case input_SignUp:
signUp();
break;
case input_Login:
login();
break;
case input_Exit:
printf("프로그램을 종료합니다.");
break;
case input_Admin:
userList();
break;
default:
printf("default\n");
}
printf("\n\n");
} while(choice != 4);
return 0;
}
void signUp() {
struct Member newMember;
printf("아이디 입력: ");
scanf("%s", newMember.username);
// printf("비밀번호 입력: ");
// scanf("%s", newMember.password);
char *password = getpass("비밀번호 입력: \n");
strncpy(newMember.password, password, sizeof(newMember.password) -1);
newMember.password[sizeof(newMember.password) -1] = '\0';
// hashPassword(password, newMember.password_hash);
// printf("%s\n", newMember.password);
// printf("password: %s", password);
// printf("newMember.password: %s", newMember.password);
// printf("비밀번호 한번 더 입력: ");
// scanf("%s", newMember.checkPassword);
char *checkPassword = getpass("비밀번호 한번 더 입력 \n");
strncpy(newMember.checkPassword, checkPassword, sizeof(newMember.checkPassword) -1);
newMember.checkPassword[sizeof(newMember.checkPassword)-1] = '\0';
// printf("pass: %s\n newMemberPass: %s\n checkPass: %s\n newMemberCheckPass: %s\n", password, newMember.password, checkPassword, newMember.checkPassword);
if(strcmp(newMember.password, newMember.checkPassword) == 0) {
members[memberCount] = newMember;
memberCount++;
printf("회원가입 완료.\n");
return;
}
printf("회원가입 실패.\n");
}
void login() {
char username[50];
// char password[50];
int i;
printf("아이디 입력: ");
scanf("%s", username);
// printf("비밀번호 입력: ");
// scanf("%s", password);
char *password = getpass("비밀번호 입력: \n");
for (i = 0; i < memberCount; i++) {
if(strcmp(username, members[i].username) == 0 && strcmp(password, members[i].password) == 0) {
printf("로그인 성공\n");
return;
}
}
printf("로그인 실패\n");
}
void displayMenu() {
printf("\n메뉴\n");
printf("1. 회원가입\n");
printf("2. 로그인\n");
printf("3. 회원 목록 보기\n");
printf("4. 종료\n");
}
void userList() {
puts("회원목록은 관리자만 확인할 수 있습니다.\n");
char *password = getpass("관리자 비밀번호 입력: ");
if (strcmp(password, "admin") == 0) {
printf("\n--회원 목록--\n");
for (int i = 0; i < memberCount; i++) {
printf("%d. %s\n", i + 1, members[i].username);
}
printf("------------\n");
} else {
printf("관리자 비밀번호가 다릅니다.\n");
}
}
암호화 관련은 오류가 있어 파악 후 다시 작성해보도록 해야겠다.
'C 프로그래밍' 카테고리의 다른 글
C프로그래밍 2023.12.15 로그인 프로그램 코드 수정 및 변화 (0) | 2023.12.15 |
---|---|
2023.12.15 새로운 프로젝트 도전 (0) | 2023.12.15 |
리눅스 C프로그래밍 23.12.12 (0) | 2023.12.13 |
리눅스 C프로그래밍 23.12.11 (0) | 2023.12.11 |
C프로그래밍 23.12.10 (0) | 2023.12.11 |