2 : 대칭암호화 소제목 : 기본적인 대칭암호화.

Slides:



Advertisements
Similar presentations
멘토링 2 주차 장 프로그래밍을 위한 자바의 자료형  값이 변하지 않는 상수  메모리 기억공간인 변수.
Advertisements

1 ‘ 우리나라의 주요공업 ’ - 정도웅, 주민혁, 안수진, 백경민, 엄다운, 박경찬 -.
순천향대학교 정보보호연구회 김현민 DES (Data Encryption Standard)
명품 JAVA Programming 제 3 장 반복문, 배열, 예외처리.
어서와 Java는 처음이지! 제3장선택과 반복.
컴퓨터 응용 및 실습 Part1. OOP&Java Programming data type Review
공부할 내용 조상들이 살던 곳 자연과 잘 어울리는 한옥 지방에 따라 서로 다른 집의 모양 섬 지방의 집
사랑, 데이트와 성적 자율성 :데이트 성폭력!!! 성폭력예방교육 전문강사 / 여성학 전공 신 순 옥.
퇴계와 율곡의 사회사상 비교 남 일 재 동서대학교 교수/ 정치학 박사 1. 퇴계 이황과 율곡 이이의 약전(略傳)
자바 암호 프로그래밍 Java Cryptography Programming
어서와 Java는 처음이지! 제2장 자바 프로그래밍 기초.
7장 배열 ②.
Chapter 02 JAVA 프로그래밍 시작하기 01 실무에서 사용하는 JAVA 개발 환경 02 JAVA 프로그램 작성
Java Seminar 6.
Programming for the java Virtual machine
제14장 원격 메소드 호출 김 기 환. 조 명 휘.
501. 군인들의 세상 502. 민정 이양과 한일회담 이선용.
자바 암호 프로그래밍 Java Cryptography Programming
자바란 무엇인가? JDK의 다운로드 및 설치 방법 Hello, Java 프로그램의 작성 자바 프로그램의 작동 원리
Chapter 3. Architecture AI & HCI Lab 김 주 영.
Chapter 02 자바 기본구조 자바 프로그래밍의 기초적인 문법을 소개
음악 재생 프로그램 예외 처리 방법 try/catch 블록 예외 선언 방법
메소드 호출과 힙 원격 메소드 호출 서블릿 엔터프라이즈 자바 빈즈
Java RMI (Remote Method Invocation)
Java RMI (Remote Method Invocation)
Power Java 제4장 자바 프로그래밍 기초.
C++ Espresso 제9장 다형성.
Autokey Cipher 자동키 암호 Department of Cyber Security / 박건주.
Power Java 제10장 배열.
자바 5.0 프로그래밍.
10장 SafeTalk 시스템 소프트웨어 연구실 성순화 이재일
명품 Java Programming.
Chap07 예외 처리 7.1 예외의 개요 7.2 예외 관련 클래스 7.3 예외 처리.
Hadoop 김연왕
제 1장 소 개 컴퓨터네트워크실험실 우 준.
명품 JAVA Programming 제 15 장 애플릿과 멀티미디어.
DES를 이용한 GPS 위치 정보 암호화 송신 2조 김민수 문형진 안인석 조우람.
This, static, final 지정 예약어 자바 4대 중첩 클래스
주소록 프로그램.
Network Programming(1)
자바 5.0 프로그래밍.
12 검색.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
자바 암호 프로그래밍 Java Cryptography Programming
제2장 데이터 및 수식.
사회복지 법제론 /노인장기요양보험법 문은홍 조소라.
DataScience Lab. 박사과정 김희찬 (월)
03. 안드로이드를 위한 Java 문법 제목. 03. 안드로이드를 위한 Java 문법 제목.
WAP Java Seminar
Ch.1 Iterator Pattern <<interface>> Aggregate +iterator
프로그래밍 개론 Ⅰ 제 1장 . 서론 ①.
[INA470] Java Programming Youn-Hee Han
컴퓨터공학실습(I) 3주 인공지능연구실.
JA A V W. 04.
Spring DI 이해 및 활용.
정치개혁의 가능성 논의 권력구조 개편을 통하여 본 -개헌을 통한 정부형태의 변화를 중심으로 [한국정치론] 윤성이 교수님
자바 5.0 프로그래밍.
Java 3장. 자바의 기본 구조 I : 변수, 자료형, 연산자 public class SumTest {
JVM의 구조와 메모리 모델 JVM의 내부 구조 클래스 파일 클래스 로더 메소드(method) 영역 힙(heap) 영역
노년기 발달 장안대 행정법률과 세류반 정 오 손
Java RMI (Remote Method Invocation)
태국 문학 욜라다 왓짜니 싸란차나 팟차라와라이 끼따야펀 르앙다우 타니다.
컴퓨터 프로그래밍: 실습 1 제 1장 . 서론.
도덕과 교수-학습 모형 초등특수교육과 나성령.
성공적인 입사지원서 작성법 제이비커리어 교육수석 소 은 선.
경영학의 상황학파에 대해서… 경제학과 3학년 최준용 회계학과 4학년 진현빈
워밍업 실뭉치 전달게임.
자바 암호 프로그래밍 Java Cryptography Programming
유통경영학과 하성훈 유통경영학과 김병율 기계공학과 배용진
음파성명학 최종욱.
Presentation transcript:

2 : 대칭암호화 소제목 : 기본적인 대칭암호화

이 장에서 다룰 내용 2 1 대칭 암호화 2 2 javax.crypto.Cipher 2 3 javax.crypto.KeyGenrator 2 4 예제 #1(TripleDES) 2 5 예제 #2(Blowfish)

대칭 암호화 사용/적용 대칭 암호화는 다양한 분야에서 응용할 수 있다. 대칭 암호화는 비대칭 암호화나 공개 키 암호화보다 훨씬 빠르다, 이런 이유로 많은 양의 데이터가 전송되는 환경에서 자주 쓰인다. 파일 암호화, 네트워크 암호화, 데이터베이스 암호화 등에 많이 쓰인다. 하지만 중요한 약점은 키가 같다는 점이다. 암복화에서 같은 키가 사용된다. 만약 대칭 암호화된 메시지를 보내려면 송신자와 수신자 모두가 키를 맞춰야 한다. 이런 이유로 많은 양의 데이터를 대칭 암호화를 사용하여 암호화 하고, 대칭 키를 비대칭 암호화를 사용하여 암호화하는 것이 좋다. Key 문제가 제일 단점

javax.crypto.Cipher 자바에서 제공하는 암복호화 엔진이다. getInstance() 생성자 대신 객체 생성시 이용한다. 예) Cipher cipher = Cipher.getInstance(“Desede/ECB/PKCS5Padding”); 첫번째 매개변수는 알고리즘 이름이다. 두번째 인자는 모드이다. 세번째 인자는 패딩이다. 모드와 패딩은 뒤에서 설명하겠다.. new 연산자를 사용하지 않고 getInstance를 이용해서 객체화 한다. new 를 사용하지 않는 이유는 new를 사용하면 여러 사람이 동시에 메모리에 올려서 사용할 수 있지만 getInstance 메소드를 이용해서 “싱글톤” 기법을 이용. => 객체가 없을 때만 메모리에 올리고 이미 메모리에 올라가있다면 메모리에 올리지 않기 때문에 해당 객체는 하나만 생성된 상태에서 작업됨.(static 메소드임) init() 객체 생성후 메소드 초기화하는 작업이다. 예) cipher.init(Cipher.ENCRYPT_MODE, mykey); ENCRYPT_MODE 혹은 DECRYPT_MODE로 작동방식을 결정한다. 두번째는 미리 정의 한 키를 적어준다.

getInstance() -> init() -> update() -> doFinal() javax.crypto.Cipher update() 암복호화 할 대상을 바이트 배열의 형태로 데이터를 사이퍼에 넘겨줘야 한다. 예) String myString = “Hello Cipher”; byte[] plaintext = myString.getBytes(“UTF8”); byte[] ciphertext = cipher.update(plaintext); 인코딩을 지정해 주지 않으면 기본적으로 사용하는 인코딩이 명시 되는데 암호화와 복호화시 다른 인코딩 방식이 지정될 수 있으니 꼭 명시하여 사용하자! 인코딩을 언급 해주지 않으면 암호화한 컴퓨터, 복호화하는 컴퓨터가 다를 경우 충돌로 인해 원하는 결과가 나오지 않을 수 있다. doFinal() 사이퍼로 부터 암호화된 데이터를 얻었으므로 doFinal()로 암호화된 데이터가 있는 바이트 배열을 구한다. 예) byte[] ciphertext = cipher.doFinal(); getInstance() -> init() -> update() -> doFinal() 4가지 메소드를 사용하므로 꼭 알아 두자

javax.crypto.KeyGenrator KeyGenerator를 이용하여 대칭 암호화해 쓸 키를 생성할수 있다. 3개의 메소드를 기본으로 한다. getInstance() 생성자 대신 객체 생성시 이용한다. 예) KeyGenerator keyGenerator = KeyGenerator.getInstance(“DESede”); DESede 키를 생성할 키 생성자를 생성할수 있다. 알고리즘 init() KeyGenerator의 객체를 초기화 할때 키의 크기를 정한다. 사용하는 알고리즘 마다의 키가 틀린것을 명시해서 사용한다. 예) keyGenerator.init(168);->TripleDes는 168비트로 사용 generateKey() 이 메소드는 Cipher의 인스턴스에 쓰일 Key객체를 실제로 만들어낸다. 예) Key myKey = keyGenerator.generateKey(); * Key 클래스는 java.security.Key 패키지에 있다. 실제 Key 생성

예제 #1 import java.security.*; import javax.crypto.*; public class SimpleExample { public static void main (String[] args) throws Exception String text = “Hello Java Security!!”; System.out.println(“Start TripleDES key..."); KeyGenerator keyGenerator = KeyGenerator.getInstance("TripleDES"); keyGenerator.init(168); // need to initialize with the keysize Key key = keyGenerator.generateKey(); System.out.println("Done generating the key."); Cipher cipher = Cipher.getInstance("TripleDES/ECB/PKCS5Padding"); cipher.init(Cipher.ENCRYPT_MODE, key); //암호화 모드 Key 생성

예제 #1 byte[] plaintext = text.getBytes("UTF8"); System.out.println("\nPlaintext: "); for (int i=0; i<plaintext.length; i++) { System.out.print(plaintext[i]+" "); } byte[] ciphertext = cipher.doFinal(plaintext); System.out.println("\n\nCiphertext: "); for (int i=0;i<ciphertext.length;i++) { System.out.print(ciphertext[i]+" "); cipher.init(Cipher.DECRYPT_MODE, key); //->복호화모드 byte[] decryptedText = cipher.doFinal(ciphertext); String output = new String(decryptedText,"UTF8"); System.out.println("\n\nDecrypted text: "+output); plaintext 는 string 형태 가능 ciphertext 는 string 형태 불가능

예제 #2 import java.security.*; import javax.crypto.*; public class BlowfishExample { public static void main (String[] args) throws Exception String text = “Hello Java Security!!”; System.out.println("Generating a Blowfish key..."); KeyGenerator keyGenerator = KeyGenerator.getInstance("Blowfish"); keyGenerator.init(128); // keysize 128bit Key key = keyGenerator.generateKey(); System.out.println("Done generating the key."); Cipher cipher = Cipher.getInstance("Blowfish/ECB/PKCS5Padding"); cipher.init(Cipher.ENCRYPT_MODE, key); byte[] plaintext = text.getBytes("UTF8");

예제 #2 System.out.println("\nPlaintext: "); for (int i=0;i<plaintext.length;i++) { System.out.print(plaintext[i]+" "); } byte[] ciphertext = cipher.doFinal(plaintext); System.out.println("\n\nCiphertext: "); for (int i=0;i<ciphertext.length;i++) { System.out.print(ciphertext[i]+" "); cipher.init(Cipher.DECRYPT_MODE, key); // Perform the decryption byte[] decryptedText = cipher.doFinal(ciphertext); String output = new String(decryptedText,"UTF8"); System.out.println("\n\nDecrypted text: "+output);

Thank You !