C언어의 해싱 코드 구성
안녕하세요 프로젝트를 하고 있는데요 c언어로 해싱 및 복호화 과정을 코드로 간단히 작성하고 발표를 할건데요 우리가 3가지 방법을 선택했습니다 1. 제산함수 2. 중간제곱함수 3. 폴딩함수 완성을 못하고 있습니다 도와주실 수 있을까요 #include #include #include #define MAX_CODE_LENGTH 50 // 암호화된 코드를 저장하는 배열 char encryptedArray[5][MAX_CODE_LENGTH]; //제산 해시함수 /* 문자열 -> 문자의 아스키코드를 모두 더한 값, 숫자 -> 각 숫자를 모두 더한 값을 해시값으로 선정) */ int additiveHash(char* code) { int hash = 0; for (int i = 0; i = '0' && inputCode[0] codes[i % 5][0] != '\0') { // i%5의 위치가 비어 있는지 확인 hashValue += i; // 비어있지 않다면? -> 충돌 발생, hashvalue에 i를 더하여 다음 위치 계산, 새로운 해시 값 얻을 수 있음 i++; } } else { // 홀수인 경우 체이닝 int index = hashValue % 5; // hashValue를 배열의 크기로 나눈 나머지를 취해 배열 내 위치 저장 결정 while (encryptedCodes->codes[index][0] != '\0') { // 선택한 인덱스에 다른 코드가 존재하는지 확인 index = (index + 1) % 5; // 충돌이 발생하면 다음 슬롯으로 이동하여 빈 슬롯을 찾기위해 인덱스를 증가시킴 } hashValue = index; } sprintf(encryptedArray[hashValue % 5], "%d", hashValue); // 해싱된 값을 암호화 한 배열에 저장 strcpy(encryptedCodes->codes[hashValue % 5], inputCode); // 암호화 이전 코드를 복호화 목록에 저장 printf("암호화 완료! 해싱된 코드: %d\n", hashValue); } // 사전 코드 출력 함수 void printAdvancedCodes(char advancedCode[][5], int numCodes) { printf("\n--- 사전 코드 목록 ---\n"); for (int i = 0; i codes[i]); //원래의 사전 코드 번호와, 사전 코드가 나옴 } } printf("------------------------\n"); // 배열 초기화 for (int i = 0; i codes[i][0] = '\0'; } encryptedCodes->count = 0; printf("복호화 완료! 배열 초기화됨.\n"); } int main() { char advancedCode[5][5]; // 최대 5개의 코드를 저장할 배열 int numCodes = 5; // 저장할 코드의 개수 enterAdvancedCodes(advancedCode, numCodes); EncryptedCodes encryptedCodes; encryptedCodes.count = 0; while (1) { int choice = showMenu(); switch (choice) { case 0: //사전코드 출력 printAdvancedCodes(advancedCode, numCodes); break; case 1: // 암호화 하기 encrypt(&encryptedCodes, advancedCode, numCodes); break; case 2: // 암호화 된거 출력 printEncryptedArray(); break; case 3: // 복호화 된거 출력 후 초기화 decrypt(&encryptedCodes); break; case 4: // 종료 printf("프로그램을 종료합니다.\n"); return 0; default: printf("올바른 메뉴 번호를 선택하세요.\n"); } } return 0; }