2017년 12월 11일 월요일

네트워크 12월 12일 - 1

피켓트레이서

라우터 2911

2960 스위치

PC 서버

서버 DNS, MAIL, WEB, 방화벽 설정

2017년 12월 8일 금요일

자바 복소수

복소수 = 실수부 + 허수부

예) 3 + 2i, -1 - 2i

i = root(-1)
i*i = -1

복소수 합, 곱

(1+2i) + (2+3i) = 3 + 5i
(1+2i) * (2+3i) = 2 + 3i + 4i - 6 = -4 + 7i  // 분배법칙 적용

2017년 12월 7일 목요일

JAVA Student 클래스 만들기, String.format 메소드


class Student1 {
private String name;
private int rollno, age;

public void setName(String n) {
name = n;
}
public void setRollno(int r) {
rollno = r;
}
public void setAge(int a) {
age = a;
}
public String toString() {
return String.format("학생[%s:%d:%d]", name, rollno, age);
}

}


public class StudentTest {

public static void main(String[] args) {
Student1 s = new Student1();

s.setName("김현준");
s.setAge(24);
s.setRollno(1301081);

System.out.println(s);

}

}

2017년 12월 6일 수요일

네트워크 12월 07일 - 2

암호 보안 기술
원웨이 펑션으로 역으로 되돌리는데 컴퓨터 계산으로 10년 걸린다 한마디로 불가능
되돌릴거면 알고리즘을 안다 해도 키를 알아야 한다.

비밀키 = 대칭형, 대표적으로 DES, 암호키와 복호키가 동일, 키의 분배 문제가 있다.(키 분배의 어려움) 이걸 개선한것이 비 대칭형(공개키)
비 대칭형 = 잠그는거랑 푸는게 다르다. 대표적으로 RSA, 공개키 나에게 보낼 사람들은 공개된 키로 암호화를 해서 보낸다. 내가 가진 키로만 풀 수 있으니 비밀성 보장., 암호화와 복호화키가 다르니 키 분배 문제가 없다.
전자서명 = 키(개인키+공개키)를 이용하여 본인만 가지고 있는 키를 이용하여 본인 이라는걸 증명,
인증 = 인증과 권한을 헷갈리면 안됨, 인증을 위해 시스템에 접근하는 각 사용자가 권한이 있는 사용자인지 구분해야 하고, 각 사용자가 본인 여부를 확인하는 과정도 필요하다.
생체 인식 = 개인의 독특한 생체 정보(지문, 목소리, 홍채, 손의 정맥 등)를 패스워드로 활용하여 인증하는 방식.

메일 보안 기술
- 메일 자체를 암호화 하여 슈퍼유저라도 볼 수 없게 만든다.
PGP 보안성은 조금 취약하나 구현이 쉽다.
PEM - 표준형, 좀 더 강력하다



---------------------------------------------------------------------------------------
GN3 - 피켓트레이서 같은 프로그램인데 존나 무거움

2017년 12월 5일 화요일

네트워크 12월 06일 - 1

어플리케이션 보안
네트워크 보안

차단

가로채기 - 슬리핑 가는 정보를 도청

변조 - 문서를 바꿔서 전달
위조 - 권한을 바꿔 전달

IP 스푸핑 - ip주소를 속이는 행위 DHCP

IP 스푸핑을 차단하는 방법
- 엑세스 제어
- 필터링
- 암호화

IP 스니핑 - 데이터를 엿듣는 일종의 도청 행위 스위치가 나오고나서 많이 사라졌다. DHCP 스푸핑과 같이 사용해야 사용할만하다

SSL 시큐어 소켓 레이어
VPN 버추얼 프라이빗 네뜨웍

시스템 보안 기술 - 자기 자신 보안, 개인 방화벅, 침입 탐지 시스템, 침입 방지 시스템

방화벽 - 출입문과 비슷하다. 인증된 사용자만 들어오게 허용.
바왛벽의 기본 구성요소
네트워크 정책 - ICMP 프로토콜 차단 등
방화벽 사용자 인증 시스템 - 아디 로그인 같이 이용
패킷 필터링, 응용 계층 게이트웨이


바오하벽의 일반적인 사용 방법은 스크리닝 라우터

베스천 호스트 스크리닝 라우터 보단 속도 느림


방화벽 시스템 방식
- 패킷 필터링 방식
> 디도스를 못막는다. 7계층 어픞리케이숀 방화벽은 막음

하이브리드 방화벽
> 혼용 방화벽

인바운드 - 내쪽으로 들어오는거
아웃바운드 - 나가는거

침입 탐지 시스템(IDS)
- 액숀을 안취한다. 경고만 해줌

침입 방지 시스템(IPS)
- 액숀을 취한다. 실제로 막아줌 비쌈 능동적인 시스템

요즘은 웹 방화벽도 있다. http를 타고오는 스크립트 분석

일반적인 방화벽 3~4계층

암호화 고등수학을 해야함 지가 박사때 들은거 자랑함 지가 수학 97점인데 포기함 지같은 천재도 못한다고 개념만 알라고함

암호화는 키와 알고리즘으로 구성, 원웨이 평션을 이용, 철수야 방정식 알제? 윤동아 옆에 누고 A+B=C인데 C는 A+B인걸 못알게함 이게 원웨이 뻥션임 DES  잠그는키와 푸는키가 같음
대칭형 암호화 - 잠그는 키와 여는 키가 같음 존나큰 단점이 키를 나눠써야함 키만 있으면 개나소나 염
비 대칭형 암호화 - 잠그는 키와 푸는 키가 다름 대표적 RSA, 퍼블릭키 알고리즘이라고도 함 내가 이걸 썻다 도장 딱 전자 서명

비밀키, 공개키 비슷 인증, 전자 서명 비슷

JAVA

import java.util.Scanner;
public class Www {
 public static void main(String[] args) {
  Scanner sc = new Scanner(System.in);
  String str;
 
  while (true) {
   System.out.print("문자열을 입력하세요> ");
   str = sc.next();
  
   if (str.equals("quit"))
    break;
   if (str.matches("^www\\.(.+)")) // 정규식 www.으로 반드시 시작해야함 ^문자열의 시작  \\. \"하듯이 일반적인 .표현 (.+) 아무거나(.) 와야된다.
    System.out.println(str + " 은 'www'로 시작합니다.");
   else
    System.out.println(str + " 은 'www'로 시작하지 않습니다.");
  }
 }
}

JAVA 메소드

static method(정적메소드)  ==  객체생성없이 호출

Math.sqrt(9.0) == 3.0

Math.random() : [0, 1)

Integer.parseInt("123") == 123

Double.pareseDouble("3.14") == 3.14

JAVA 문자열

문자열은 기초 자료형이 아니다. 객체이다.
객체는 하프(힢)이라는 공간에 저장된다.
String s = new String("Hello World!"); // 선언과 동시에 초기화

s == 참조변수

String 클래스의 메소드

charAt(int index)  : char해당하는 위치의 문자를 반환
equals(Ovject anObject) : boolean 문자열이 같은지 비교한다
String s1 = new String("Hello");
String s2 = new String("Hello");
String s3 = "Hello";
String s4 = "Hello";

s3 == s4 // true 처음은 새로 만들어도 s4 얘는 s3의 Hello 그대로 가져옴
s1 == s2 // false 이유는 참조형 변수라서 주소값을 비교하기 때문. new연산자를 사용해서 둘다 새로운 객체이다.
s1.equals(s2) // true , 대소문자 구분한다. Hello와 hello 구분하면 안댐
s1.equalsIgnoreCase(s2) // Hello, hello를 넣어도 true이다. 대소문자 구분을 안 한다.
s1.concat(s2) // HelloHello 문자 두개를 붙인다 s1+s2와 같은 기능이다.
s1.isEmpty() // false 이 메소드는 length()가 0이면 true를 반환한다.
compareTo(Stirng anotherString) // 사전적 순서로 문자열을 비교한다. 앞에 있으면 -1, 같으면 0, 뒤에 있으면 1이 반환, 내가 작으면 음수 내가 크면 양수 사전적 순서라는 것은 사전에 누가 먼저 나오는지 라고 생각하면 편하다. "abcde"와 "abd"를 비교하면 "abd"가 더 크다.
s1 = Hello, s2 = World
s1.compareTo(s2) // s1 - s2 =-15, s2 - s1 = 15

/* String 객체 == 상수 문자열
 * 기존에 참조하던 객체를 바꾸는게 아니라 참조 주소가 변경된것이다.
 * String s1 = new String("Hello");
 * s1 = s1.toUpperCase();
 *
 * Hello 값이 어디 가는게 아니라 그대로 있고 s1은 참조하던 주소가 변경된것이다.
 * Hello == 쓰레기
 *   
 */
public class StringTest {
 public static void main(String[] args) {
  String proverb = "A barking dog";
  String s1, s2, s3, s4;
 
  System.out.println("문자열의 길이 ="+ proverb.length());
 
  s1 = proverb.concat(" never Bites!"); // 문자열 결합 + 연산자와 같음
  s2 = proverb.replace('b', 'B'); // 문자 교환
  s3 = proverb.substring(2, 5); // 인덱스 2이상 5미만
  s4 = proverb.toUpperCase(); // 대문자 변환
 
  System.out.println(s1);
  System.out.println(s2);
  System.out.println(s3);
  System.out.println(s4);
 }
}

JAVA 실습) 직사각형의 너비와 높이를 입력받아 넓이와 둘레길이 계산

import java.util.Scanner;
public class Test01 {
 public static void main(String[] args) {
  Scanner sc = new Scanner(System.in);
  int w,h;
 
  System.out.print("가로, 세로 입력: ");
  w = sc.nextInt();
  h = sc.nextInt();
 
  System.out.printf("넓이 = %d\n둘레길이 = %d", w*h, (w+h)*2);
 }
}

import java.util.Scanner;
public class Test02 {
 public static void main(String[] args) {
  Scanner sc = new Scanner(System.in);
  int w,h;
 
  System.out.print("가로, 세로 입력: ");
  w = sc.nextInt();
  h = sc.nextInt();
 
  System.out.printf("넓이 = %d\n둘레길이 = %d", area(w,h), length(w,h));
 }
 static int area(int w, int h) {
  return w*h;
 }
 static int length(int w, int h) {
  return (w+h)*2;
 }
}


import java.util.Scanner;
class Rectangle {
 private int w, h;

 public int area() {
  return w*h;
 }
 public int length() {
  return (w+h)*2;
 }
 public void setW(int x) {
  w = x;
 }
 public void setH(int x) {
  h = x;
 }
 public String toString() {
  return "Rectangle[너비:" + w + " 높이:" + h + "]" ;
 }

}
public class Test03 {
 public static void main(String[] args) {
  Scanner sc = new Scanner(System.in);
  Rectangle MyRt = new Rectangle();
  System.out.print("가로, 세로 입력: ");
  MyRt.setW(sc.nextInt());
  MyRt.setH(sc.nextInt());
 
  System.out.printf("넓이 = %d\n둘레길이 = %d\n", MyRt.area(), MyRt.length());
  System.out.println(MyRt);
 }
}

2017년 12월 1일 금요일

JAVA 실습) 반지름 입력받아 원의 넓이와 둘레 출력

3가지 방법이 있다.
1) 바로 main 안에서 구현

import java.util.Scanner;

public class MyMathTest {

public static void main(String[] args) {
int radius;
final double PI = 3.14;
double area, round;
Scanner sc = new Scanner(System.in);

System.out.print("반지름 입력: ");
radius = sc.nextInt();

area = radius * radius * PI;
round = 2 * PI * radius;

System.out.printf("원의 넓이=%.1f\n 원의 둘레길이=%.1f\n", area, round);

}

}

2) 절차지향프로그래밍 (C언어 스타일)
import java.util.Scanner;

public class MyMathTest {

public static void main(String[] args) {
int radius;
double area, round;
Scanner sc = new Scanner(System.in);
System.out.print("반지름 입력: ");
radius = sc.nextInt();
area = calArea(radius);
round = calRound(radius);
System.out.printf("원의 넓이=%.1f\n원의 둘레길이=%.1f\n", area, round);

}
static double calArea(int r) {
final double PI = 3.14;
return r*r*PI;
}
static double calRound(int r) {
final double PI = 3.14;
return 2*PI*r;
}

}

3) 객체지향프로그래밍

1. 추상화


상태(필드, 속성) : 반지름

동작 : 넓이, 둘레길이

2. UML

Cricle
---------------------------------
- radius : int
+ calArea() : double
+ calRound() : double
+ setRadius(int r) : void
+ toString() : String
---------------------------------

3. UML을 토대로 클래스 생성

public class Circle {
int radius;
static final double PI = 3.14;
public double calArea() { // 필드에 r이 있으니 매개변수가 따로 필요없다. 객체지향의 장점이다. 전달값을 줄일수가있따
return radius*radius*PI;
}
public double calRound() {
return 2*PI*radius;
}
public void setRadius(int r) {
radius = r;
}
public String toString() {
return "Circle[radius="+ radius+ "]";
}

}

4. 객체를 이용해 완성
import java.util.Scanner;

public class MyMathTest {

public static void main(String[] args) {
int radius;
double area, round;
Scanner sc = new Scanner(System.in);
Circle myCircle = new Circle();
System.out.print("반지름 입력: ");
radius = sc.nextInt();
myCircle.setRadius(radius);
area = myCircle.calArea();
round = myCircle.calRound();
System.out.printf("원의 넓이=%.1f\n원의 둘레길이=%.1f\n", area, round);
System.out.println(myCircle);

}

}

JAVA UML

객체 추상화 -> 클래스 -> 객체 사용

클래스 만들기 전에 UML을 만든다.
그림을 그리는 것
- 비공개 + 공개


Television

- isOn : boolean
- volume : int
- channel : int
--------------------
+setChannel()
+getChannel()
.
.
.
.

시스템 보안

1. 내컴퓨터는 해킹이 당한적 있는가? 있다. 2. 컴퓨터를 하게되면 해킹을 당한다. 무엇을 이용해 해킹을 하는가? 인터넷이 가장 보편적. 사회적인 공격(주변인이 사전정보를 가지고 해킹) 3. 대응을 어떻게 해야하나? 보안프로...