[암호학] 대칭키와 비대칭키, SSL 통신과 PKI 시스템, CA, RA
·
CS/암호학
이 내용은 인프런에 있는 강의 널널한 개발자 님의 외워서 끝내는 SSL과 최소한의 암호기술를 정리한 것이며자신이 보안 암호화 기술에 대한 개념이 "아주" 부족하다고 생각 되는 분은 꼭 수강하시는 것을 추천 드립니다! 대칭키와 비대칭 키는 인터넷을 통해 인증하게 되었을 때 많이 사용하는 방식중 하나 입니다. 그럼 이제 이러한 개념을 파악해보겠습니다. 일단 개념에 들어가기전 비트 연산중 XOR 연산에 대하여 숙지해야합니다.비트 XOR 연산비트 XOR 연산자는 비트 단위로 XOR라 불리는 배타적 OR 연산을 처리합니다. 배타적(Exclusive) OR 연산은 두 비트가 서로 다른 경우에만 1이 되고 그렇지 않으면 0이 되는 다소 특이한 연산자입니다. 연산자 기호로는 캐럿(^) 기호를 사용합니다.😀 대칭키키 ..
[암호학] 암호학의 기본 CheckSum 과 Hash
·
CS/암호학
😀공부하게 된 이유최근 사내에서 개발 업무를 진행하게 되었을 때,보안과 검증 로직이 아주 중요하다는 것을 알게 되었습니다.(유출하게 되었을 때 많은 고객을 잃을 수 있습니다..!) 따라서, 이러한 개념을 한번 정리 해야겠다는 생각을 하게 되었습니다. 이 내용은 인프런에 있는 강의 널널한 개발자 님의 외워서 끝내는 SSL과 최소한의 암호기술를 정리한 것이며 자신이 보안 암호화 기술에 대한 개념이 "아주" 부족하다고 생각 되는 분은 꼭 수강하시는 것을 추천 드립니다! 만약에 정리 내용중 잘못된 내용이 존재한다면 댓글로 알려주시면 감사드리겠습니다!그럼 정리해보겠습니다.😀Checksum 과 Hash- checksumchecksum(체크썸) 은 이라는 개념은 CS(computer science) 에서 전반적으..
8) 명령행 인자
·
CS/배열
들어가기 전에 make나 clang과 같은 프로그램을 실행할 때 컴파일하고자 하는 코드 외에도 컴파일 후 저장하고자 하는 파일명과 같이 추가적인 정보를 함께 줄 수도 있습니다. 이런 정보들을 명령행 인자 라고 부릅니다. 우리가 작성하는 프로그램에서도 명령행 인자를 받을 수 있도록 설계할 수 있습니다. 학습 목표 명령행 인자를 받는 프로그램을 C로 작성할 수 있습니다. 핵심 단어 명령행 인자 argv argc 우리가 여태껏 많이 사용해온 main 함수를 보다 자세히 들여다볼 때가 왔습니다. main도 그 형태를 보면 하나의 함수임을 알 수 있는데요, 이젠 더이상 main() 안에 기계적으로 void 라고 입력하는 대신 아래 코드와 같이 argc, argv 를 정의해보겠습니다. #include #includ..
7) 문자열의 활용
·
CS/배열
들어가기 전에 여태까지의 강의에서 문자열의 기본적인 개념들을 학습하였습니다. 이번 강의에서는 문자열을 좀 더 깊이 활용하는 방법을 배워보겠습니다. 문자열 안에 포함되어 있는 문자를 검색하기 위해서는 어떻게 해야 할까요? 또 특정 문자를 다른 문자로 바꾸기 위해서는 어떻게 해야 할까요? 이런 질문들에 답해보도록 하겠습니다. 학습 목표 문자열을 탐색하고 일부 문자를 수정하는 코드를 구현할 수 있습니다. 핵심 단어 strlen toupper 문자열의 길이 및 탐색 사용자로 부터 문자열을 입력받아 한 글자씩 출력하는 프로그램을 만들어 보겠습니다. 간단하게 for 루프를 통해 문자열의 인덱스를 하나씩 증가시켜가면서 해당하는 문자를 출력하면 될텐데요, 문자열의 끝은 어떻게 알 수 있을까요? 한가지 방법은 해당하는 ..
6) 문자열과 배열
·
CS/배열
들어가기 전에 우리는 여태껏 문자열을 저장하기 위해 string 자료형을 사용하였습니다. ‘문자열’이라는 단어는 다시 말해 문자가 ‘나열되어 있다’ 또는 ‘배열되어 있다’ 라는의미로 추측해 볼 수 있습니다. 이런 관점에서 봤을 때 string 자료형은 C에서 정확히 어떻게 정의되어 있을까요? 배열이라는 개념이 문자열과 어떻게 연결되는지 알아보도록 하겠습니다. 핵심 단어 문자 문자열 우리가 여지껏 사용한 문자열(string) 자료형의 데이터는 사실 문자(char) 자료형의 데이터들의 배열이었습니다. string s = “HI!”; 과 같이 문자열 s가 정의되어 있다고 생각해봅시다. s는 문자의 배열이기 때문에 메모리상에 아래 그림과 같이 저장되고, 인덱스로 각 문자에 접근할 수 있습니다 여기서 가장 끝의 ..
1) 컴파일링
·
CS/배열
컴파일링 어셈블링 링킹 지금까지는 아무것도 모른채 마구잡이로 쓴 코드가 잘 돌아갔다면 이제부터는 연습과 응용을 통해 동작 원리를 이해할 수 있을 것입니다. 우선 첫 수업에 봤던 예제를 다시 살펴보며 지금 사용하는 방법이 그때 우리가 사용한 방법과 어떻게 다른지 알아봅시다. 첫 수업에 봤던 C코드를 다시 봐보겠습니다. 우선 main이라는 함수가 있습니다. 프로그램의 시작점으로써 실행 버튼을 클릭하는 것과 같습니다. printf는 출력을 담당하는 함수입니다. printf 함수를 사용하기 위해서는 stdio.h 라이브러리가 필요합니다. 정확히 말하면 stdio.h는 헤더 파일로 C언어로 작성되어 있으며 파일명이 .h로 끝나는 파일입니다. 이 파일에는 printf 함수의 프로토타입이 있어서 Clang 컴파일러가..
8) 병합 정렬
·
CS/알고리즘
들어가기 전에 앞서 배운 정렬 알고리즘은 직관적이지만 실행 시간의 상한이 다소 높았습니다. 반복되는 작업이 많았기 때문인데요, 지난 강의에서 배운 재귀를 활용하면 정렬 알고리즘을 더 효율적으로 만들 수 있을까요? 재귀를 활용한 병합 정렬을 구현할 수 있습니다. 병합 정렬 병합 정렬 지난 단원에서 다양한 정렬 방법에 대해서 배웠습니다. 하지만 우리가 아직 공부하지 않은 대표적인 정렬 방법이 하나 더 있습니다. 전화번호부의 분할 정복 탐색처럼 데이터를 반으로 나누어간다는 것과 공통점이 있는 방법인 병합 정렬(합병 정렬)이 있습니다. 병합 정렬은 원소가 한 개가 될 때까지 계속해서 반으로 나누다가 다시 합쳐나가며 정렬을 하는 방식입니다. 그리고 이 과정은 재귀적으로 구현되기 때문에 나중에 재귀를 학습하면 더 ..
7) 재귀
·
CS/알고리즘
알고리즘을 구현하기 위해 코드를 작성하다 보면 동일한 작업을 반복해야 할 때가 있습니다. 이러한 작업을 함수로 구현하면 코드를 보다 효율적으로 만들 수 있음을 배웠습니다. 하지만 함수 내에서도 동일한 작업이 반복되는 경우는 어떨까요? 이번 강의에서는 함수를 함수 내에서 재사용하는 방법, 즉 재귀적으로 호출하는 방법을 배워 보겠습니다. 함수를 재귀적으로 사용하는 코드를 작성할 수 있습니다. 재귀 재귀 함수를 사용할 때 어디에서 호출했나요? main 안에서 프로그램을 작성하면서 필요한 순간에 호출하여 사용합니다. 그런데 main 역시 함수라는걸 기억하시나요? main이라는 함수 안에서 또 다른 함수를 사용한 것입니다. 이 사실을 알게 되었을 때, 우리는 함수가 본인 스스로를 호출해서 사용할 수 있는지에 대해..