Computer Sciences(236)
-
[정보보안] 2. 암호의 역사
암호의 분류 암호는 일반적으로 대치 암호와 전치 암호로 구분할 수 있다. 대치 암호 1:1 대치 암호 - 시저 암호 간격 조정 대치 - 시저 암호 + 모듈려 연산 다중 치환 암호 - 바이젤이 제안한 cipher table 전치 암호 행렬 테이블 방식 키 조정 방식(순서) 확장 키 조정 방식(순서 + 간격) Nihilist 암호(순서 + 간격 + 방향) 암호의 종류 대치 암호 치환 암호라고도 부른다. 한 글자를 다른 글자로 대치시키는 암호 방식이다. 대표적으로 시저 암호가 있다. 시저 암호 암호의 시작으로 인정받는 암호이다. 줄리우스 시저가 만들었다. 평문의 숫자나 문자를 다른 숫자나 문자로 일대일 대응시켜 암호화하는 방식이다. 주로 영문자를 암호화할 때 사용하며 n만큼 시프트하여 대치시킨다. 예를 들어 ..
2021.10.25 -
[정보보안] 1. 정보보안 개념
정보보호의 3요소 기밀성 정보는 인가된 사용자만 접근할 수 있어야만 한다는 것이다. 무결성 정보는 보내고자 하는 원형 그대로 보존되어야 한다는 것이다. 가용성 정보는 필요로 할 때 언제든지 접근 가능해야 한다는 것이다. 부가적으로 부인 방지(Accountability), 인증(Authentication), 신뢰성(Reliability) 등이 있다. 정보 시스템에 대한 공격 정보 시스템에 대한 공격은 수동적 공격과 능동적 공격으로 나뉜다. 수동적 공격 수동적 공격(Passive Attack)은 송신자와 수신자 사이에서 전송되는 데이터를 지켜보는 공격이다. 따라서 데이터에 직접적인 공격을 하지 않으며 송수신되는 데이터를 보기만 하는 것이다. 능동적 공격 능동적 공격(Active Attack)은 송신자와 수신..
2021.10.25 -
12. State Pattern
문제 한 뽑기 기계가 있다. 이 뽑기 기계는 다음 상태 다이어그램으로 동작한다. 이 다이어그램을 바탕으로 뽑기 기계를 코드로 구현해보자. 먼저 상태를 살펴보자. 동전이 없는 상태, 있는 상태, 캡슐이 판매된 상태, 매진된 상태가 있다. 이를 클래스 변수로 만들면 다음과 같다. final static int SOLD_OUT = 0; // 캡슐매진 final static int NO_QUARTER = 1; // 동전없음 final static int HAS_QUARTER = 2; // 동전있음 final static int SOLD = 3; // 캡슐판매 int state = SOLD; // 현재 상태를 저장하기 위한 변수 동전이 투입, 반환되고 있는 상태에서 손잡이를 돌리면 캡슐이 나간다. // 동전을 투..
2021.10.15 -
11. Composite Pattern
문제 이터레이터 패턴에서 사용한 예시를 다시 써보자. 두 가게를 합병한 후로 장사가 탄탄대로를 달려서 이젠 점심 메뉴에 디저트 메뉴도 넣자는 기획이 들어왔다. 즉 점심 메뉴 안에 디저트 메뉴가 포함되는 것이다. 이러한 구조는 어떤 자료구조를 사용해야 할까? 메뉴 안에 메뉴... 트리 구조가 적당할 것 같다. 그림을 그려보면 대충 다음과 같다. 기존의 이터레이터 패턴을 유지하면서 모든 메뉴를 순회하도록 변경할 수 있을까? 정답부터 말하자면 그렇다. 컴포지트 패턴을 적용하면 이를 해결할 수 있다. 컴포지트 패턴 객체들을 트리 구조로 구성하여 부분과 전체를 나타내는 계층 구조로 만드는 패턴이다. 이 패턴을 이용하면 클라이언트에서 개별 객체와 다른 객체들로 구성된 복합 객체를 똑같은 방법으로 다룰 수 있다. 이..
2021.10.15 -
10. Iterator Pattern
문제 우리는 프로그래밍을 하면서 여러 자료구조를 사용한다. 간단하게는 배열부터 연결 리스트, 힙, 트리도 사용하기도 한다. 그런데 이런 자료구조에 저장한 데이터를 모두 접근하고 싶다면 어떻게 할까? 모든 자료구조마다 for 문을 돌리면서 탐색해야 할까? 또 자료구조마다 탐색 방법도 다른데 어떻게 해야 될까? 이러한 문제를 이터레이터 패턴으로 해결할 수 있다. 우리는 팬케이크 가게를 운영한다. 우리는 ArrayList를 사용해서 메뉴를 관리한다. 그런데 사업이 잘 되어 다른 가게와 합병하게 되었다. 그런데 이 가게는 배열로 메뉴를 관리하고 있었다. 그래서 기존에 우리가 메뉴를 접근할 때 사용하던 방식과 달라 혼란이 발생했다. public class MenuItem { String name; String d..
2021.10.15 -
9. Template Method Pattern
문제 어느 카페에서는 커피와 홍차를 판매한다. 이 둘의 공통점은 무엇일까? 카페인이 들어간다는 것이다. 각각을 만드는 법은 다음과 같다. 커피 만드는 법 물을 끓인다. 끓는 물에 커피를 우려낸다. 커피를 컵에 따른다. 설탕과 우유를 추가한다. 홍차 만드는 법 물을 끓인다. 끓는 물에 차를 우려낸다. 차를 컵에 따른다. 레몬을 추가한다. 이를 각각 클래스로 작성하면 아래와 같다. public class Coffee { void prepareRecipe() { boilWater(); brewCoffeeGrinds(); pourInCup(); addSugarAndMilk(); } public void boilWater() { System.out.println("물 끓이는 중"); } public void br..
2021.10.14