c언어
<배열>
- 배열이름: 배열 이름은 할당된 메모리 공간의 사작 주소


- 배열 인수 전달: 배열을 인수로 전달할 때, ‘배열 이름’만 전달
매개변수는 일반 배열처럼 선언하지만, 이 때 크기는 무시됨

- 배열원소 변경: 배열을 인수로 전달받은 함수에서 배열 원소의 값을 변경하면 원본 배열의 원소 값이 바뀜
- 2차원 배열


<포인터>
- 포인터: 데이터를 저장하기 위해 할당된 메모리 공간의 주소를 나타냄
- 포인터 상수 : 메모리 주소 값
- 포인터 변수 : 주소 값을 저장할 수 있는 변수
- 포인터 선언과 사용 포인터 사용 예

- int one = 1; // int 변수
- int *to_one; // int 포인터 변수
- to_one = &one; // to_one은 one을 가리킴
- one = one + 1; // one → 2
- one = *to_one + 1 // one → 3
- *to_one = one + 1 자료형 *포인터변수; // one → 4
포인터 제1법칙
“주소연산을 취한 결과에 간접참조연산을 취하면 원래 변수와 같다“
• 인수 전달
- call by value (인수를 값으로 전달) - 함수가 호출되면 인자 값을 스택에 복사
- call by reference (인수를 주소로 전달) - 전달하려는 변수의 주소를 함수에 전달 → 변수 자체 전달
• 배열과 포인터
• 포인터 제 2법칙
" 배열 첨자연산 = 포인터 연산 ”
블록암호
• 블록암호 개념: 고정된 크기의 블록으로 데이터를 처리하는 대칭키 암호화 기술
- 데이터를 블록 단위로 분할하고, 각 블록에 대해 암호화 및 복호화를 수행함.
- 주로 텍스트 데이터나 파일 같은 대용량 데이터의 보안을 위해 사용됨.
• 동작 방식
1. 분할: 평문(암호화되지 않은 원본 데이터)을 블록으로 나눈다.
2. 암호화: 각 블록에 대해 암호화 알고리즘을 적용하여 암호문(암호화된 데이터)을 생성함.
3. 복호화: 암호문을 블록 블록 단위로 나눈 후. 각 블록에 대해 복호화 알고리즘을 적용하여 평문을 복원함.
혼돈: 평문 1비트의 변화가 아호문에 어떤 변화를 초래할 지 예측할 수 업어야 함.
확산: 평문을 구성하는 각각의 비트들의 정보가 여러 개의 암호문 비트에 영향을 미쳐야 함.
두 가지 모두를 충족시키는 것이 좋은 암호이다.
• 블록암호 운영모드
모드: 긴 평문을 블록으로 나눠서 암호화하는 방식
• ECB 모드란?
평문 블록을 암호화한 것이 그대로 암호문 블록이 되는 것을 말함.
장점: 암호화와 복호화가 병렬적으로 가능, 일부 브록만 독립적으로 암호화가 가능, 블록 오류가 다른 블록에게 영향을 주지 않음
단점: 공격에 취약함
와이어샤크
• 와이어샤크 설치하기
• 와이어샤크 기본 사용법
• 와이어샤크 패킷 분석 실습
패스워드 저장 코드 실습



