살구월드

잠깐, 리눅스, C 언어, Java, Python 등
각종 예제 검색하기

 

목차

  1. 이전 포스팅의 C 언어 Openssl 라이브러리로 AES 256 대칭키 생성하기 예제 학습 링크
  2. 이전 포스팅의 C 언어 Openssl 라이브러리 활용 AES 256 암호화 및 복호화 예제
  3. 이전 포스팅의 C 언어 Openssl AES 256의 CBC 및 CTR 체인 모드 예제 학습 링크
  4. C 언어 단순 연결리스트 구현 및 사용자 입력 값 저장 예제
  5. C 언어 Hash Search 해시 탐색으로 연결 리스트에서 사용자의 값 검색 예제

 

 

 

 

 

 

 

 

 

이전 포스팅의 C 언어 Openssl 라이브러리로 AES 256 대칭키 생성하기 예제 학습 링크

이전 포스팅에서는 c언어 프로그램과 openssl 라이브러리를 사용하여 aes 256 암호화에 쓰기 위한 대칭키를 생성하는 예제에 대해 알아보았습니다. aes 암호화는 블록 암호화라고도 부르며 암호화 및 복호화시에 1개의 블록 단위로 잘라 수행하는 알고리즘입니다. 암호화 알고리즘으로 제일 많이 사용하고 안전한 알고리즘입니다. 특히 키의 길이에 따라 보안성이 달라지기 때문에 256같은 32byte의 키를 사용하는 알고리즘을 사용해야합니다. 만약 c언어에서 openssl 라이브러리로 aes 256 대칭키 생성 방법이 궁금하시다면 아래 링크를 참고하여 학습해주세요.

 

2023.07.28 - [C] - [C/C++] Openssl 활용 AES 256 대칭키 생성 및 설정하기

 

[C/C++] Openssl 활용 AES 256 대칭키 생성 및 설정하기

목차 AES256이란? 이전 빌드 환경 구성 포스팅 이전 SHA256 해시 예제 포스팅 SHA256 해시로 32bit AES 대칭키 만들기 예제 C Openssl AES 256 컨텍스트 생성하여 키 설정 예제 1. AES256이란? AES256(Advanced Encryption

salguworld.tistory.com

 

 

 

 

 

 

 

이전 포스팅의 C 언어 Openssl 라이브러리 활용 AES 256 암호화 및 복호화 예제

다음으로 이전 포스팅에서는 c언어에서 openssl 라이브러리를 사용하여 위에서 만든 대칭키를 사용하여 aes 256 암호화 및 복호화를 수행하는 방법에 대해 알아보았습니다. 실제로 평문의 데이터를 암호화함으로써 제 3자에게 중요 정보를 노출시키지 않도록 방지할 수 있습니다. 이러한 암호화 및 복호화 알고리즘은 프로그램과 프로그램이 네트워크 통신 혹은 프로세스간 통신에 사용되는 메세지를 보안성을 높임으로써 안전한 프로그램으로 만들어줍니다. 만약 c언어에서 aes 256 암호화 및 복호화 예제가 궁금하시다면 아래 링크를 참고해주세요.

 

2023.07.28 - [C] - [C/C++] Openssl 활용 AES256 암호화 및 복호화 예제 - 2(ECB암호화 및 체인 종류)

 

[C/C++] Openssl 활용 AES256 암호화 및 복호화 예제 - 2(ECB암호화 및 체인 종류)

목차 이전 AES256 암복호화 및 복호화 예제 포스팅 C Openssl 문자열 AES 256 ECB 암호화 예제 C Openssl 파일 AES 256 ECB 예제 AES 암호화 체인 종류 1. 이전 AES256 암복호화 및 복호화 예제 포스팅 이전에 C에서

salguworld.tistory.com

 

 

 

 

 

 

 

이전 포스팅의 C 언어 Openssl AES 256의 CBC 및 CTR 체인 모드 예제 학습 링크

마지막으로 이전 포스팅에서는 c언어에서 openssl 라이브러리를 사용하여 aes256의 cbc 및 ctr 암호화 하는 체인 모드에 대해 알아보았습니다. 체인 모드는 암호화 알고리즘을 조금더 보안을 강화하여 암호문과 평문의 예측을 하지 못하도록 예방합니다. 이러한 값들은 IV라고도 부릅니다. CBC 모드와 CTR 모드는 IV를 사용하여 각각 사용자 입력값 혹은 카운터 값을 사용합니다. 만약 c언어에서 openssl의 aes 256 암호화시 CBC, CTR 체인모드 사용 방법이 궁금하시다면 아래 링크를 참고해주세요.

 

2023.07.31 - [C] - [C/C++] Openssl 활용 AES256 암호화 및 복호화 예제 - 3(CBC, CTR, 등)

 

[C/C++] Openssl 활용 AES256 암호화 및 복호화 예제 - 3(CBC, CTR, 등)

목차 이전 빌드 환경 구성 포스팅 이전 AES 암호화 포스팅 C Openssl AES 256 CBC 암복호화 예제 AES에서 IV 설정 예제 1. 이전 빌드 환경 구성 포스팅 이전에 OpenSSL 라이브러리를 정적 또는 동적으로 빌드

salguworld.tistory.com

 

 

 

 

 

 

 

 

C 언어 단순 연결리스트 구현 및 사용자 입력 값 저장 예제

아래는 c언어에서 단순 연결 리스트를 구현하여 사용자에게 정수들을 입력받는 예제입니다. 이 정수들을 활용하여 아래 예제에서 Hash Search 해시 탐색으로 값을 검색할 예정입니다.

 

#include <stdio.h>
#include <stdlib.h>

// 연결 리스트의 노드를 나타내는 구조체 정의
struct Node {
    int data;
    struct Node* next;
};

// 연결 리스트에 노드를 추가하는 함수
struct Node* insertAtEnd(struct Node* head, int data) {
    struct Node* new_node = (struct Node*)malloc(sizeof(struct Node));
    new_node->data = data;
    new_node->next = NULL;

    if (head == NULL) {
        head = new_node;
    } else {
        struct Node* temp = head;
        while (temp->next != NULL) {
            temp = temp->next;
        }
        temp->next = new_node;
    }

    return head;
}

// 연결 리스트를 출력하는 함수
void displayList(struct Node* head) {
    if (head == NULL) {
        printf("리스트가 비어 있습니다.\n");
        return;
    }

    struct Node* temp = head;
    while (temp != NULL) {
        printf("%d -> ", temp->data);
        temp = temp->next;
    }
    printf("NULL\n");
}

// 예제 사용
int main() {
    struct Node* head = NULL;
    int value, n;

    printf("원소의 개수를 입력하세요: ");
    scanf("%d", &n);

    for (int i = 0; i < n; ++i) {
        printf("원소 %d을(를) 입력하세요: ", i + 1);
        scanf("%d", &value);
        head = insertAtEnd(head, value);
    }

    printf("입력된 연결 리스트: ");
    displayList(head);

    return 0;
}

 

c언어에서 단순 연결 리스트에 사용자가 입력한 정수 값을 저장하는 모습

 

 

 

 

 

 

 

 

C 언어 Hash Search 해시 탐색으로 연결 리스트에서 사용자의 값 검색 예제

아래는 c언어에서 단순 연결 리스트에 저장된 값들 중 사용자가 찾고자하는 값이 존재하는지 찾는 예제입니다. 탐색 알고리즘으로는 Hash Search 해시 탐색을 사용합니다. 이는 정보보안기사, 정보처리기사 자격증 공부시 자주 출제되는 문제입니다.

 

#include <stdio.h>
#include <stdlib.h>

#define SIZE 10

// 연결 리스트의 노드를 나타내는 구조체 정의
struct Node {
    int data;
    struct Node* next;
};

// 해시 테이블을 초기화하는 함수
void initializeHashTable(struct Node* hashTable[]) {
    for (int i = 0; i < SIZE; ++i) {
        hashTable[i] = NULL;
    }
}

// 해시 함수를 사용하여 키를 해시 값으로 변환하는 함수
int hashFunction(int key) {
    return key % SIZE;
}

// 해시 테이블에 노드를 추가하는 함수
void insertInHashTable(struct Node* hashTable[], int key) {
    int index = hashFunction(key);

    struct Node* new_node = (struct Node*)malloc(sizeof(struct Node));
    new_node->data = key;
    new_node->next = hashTable[index];
    hashTable[index] = new_node;
}

// 해시 탐색을 사용하여 연결 리스트에서 값을 찾는 함수
struct Node* hashSearch(struct Node* hashTable[], int key) {
    int index = hashFunction(key);

    struct Node* temp = hashTable[index];
    while (temp != NULL) {
        if (temp->data == key) {
            return temp;
        }
        temp = temp->next;
    }

    return NULL; // 값을 찾지 못한 경우
}

// 예제 사용
int main() {
    struct Node* hashTable[SIZE];
    initializeHashTable(hashTable);

    int value, n, searchKey;

    printf("원소의 개수를 입력하세요: ");
    scanf("%d", &n);

    for (int i = 0; i < n; ++i) {
        printf("원소 %d을(를) 입력하세요: ", i + 1);
        scanf("%d", &value);
        insertInHashTable(hashTable, value);
    }

    printf("찾을 값을 입력하세요: ");
    scanf("%d", &searchKey);

    struct Node* result = hashSearch(hashTable, searchKey);

    if (result != NULL) {
        printf("값 %d을(를) 찾았습니다.\n", searchKey);
    } else {
        printf("값 %d을(를) 찾지 못했습니다.\n", searchKey);
    }

    return 0;
}

 

c언어에서 사용자가 정수를 입력할 때마다 해시 처리하여 해시테이블에 추가한다. 이후 해시테이블에서 검색한다.

잠깐, 리눅스, C 언어, Java, Python 등
각종 예제 검색하기

공유하기

facebook twitter kakaoTalk kakaostory naver band