Akashic Records

자바을 이용한 암호학 - 2 본문

오래된글/Java

자바을 이용한 암호학 - 2

Andrew's Akashic Records 2018. 4. 7. 23:22
728x90

Chapter 1 Introduction


PLT 1.1 환경설정

JSDK 1.4이상에는 JCE(Java Cryptography Extension)이 포함되어 있어서 다른 설치 작업이 필요 없다. 다음은 JDK1.4, JDK5.0에 설치된 프로바이터를 보여준다.

JAVA_HOME/jre/lib/security/java.security file

JDK 1.4

security.provider.1=sun.security.provider.Sun

security.provider.2=com.sun.net.ssl.internal.ssl.Provider

security.provider.3=com.sun.rsajca.Provider

security.provider.4=com.sun.crypto.provider.SunJCE

security.provider.5=sun.security.jgss.SunProvider


JDK5.0

security.provider.1=sun.security.provider.Sun

security.provider.2=sun.security.rsa.SunRsaSign

security.provider.3=com.sun.net.ssl.internal.ssl.Provider

security.provider.4=com.sun.crypto.provider.SunJCE

security.provider.5=sun.security.jgss.SunProvider

security.provider.6=com.sun.security.sasl.Provider


JSDK 1.3이하 버전에서는 http://java.sun.com 사이트에서 Down JCE 라이브러리를 다운 받는다. 다운 받은 JCE의 압축을 풀고 lib방 밑에 있는 모든 jar파일을[JavaHome]jrelibext방으로 카피한다. 그리고 JCE 알고리즘을 사용하기 위해서 SunJCE 프로바이터를 다음과 같이 추가한다.

[JavaHome]jrelibsecurityjava.security

security.provider.1=sun.security.provider.Sun,

security.provider.2=com.sun.crypto.provider.SunJCE


PLT 1.2 메시지 축약

메시지 축약은 기본적으로 임의 길이의 메시지를 고정된 크기로 압축하는 것이다. 이러한 압축은 해쉬 함수의 특별한 형태인 축약 함수라는 방식을 사용한다.


메시지 축약의 특징

1. 암호화는 특정 비밀키를 통해서 복원되어야만 한다. 그러나, 축약 함수는 복원이 되지 않는다. 측 어떤 정보가 안에 포함되어 있는지는 중요한 것이 아니다.

2. 축약 함수는 데이터를 압축하지만, 암호화는 일반적으로 그렇지 않다. 사실 암호화는 보통 데이터를 확장한다.

3. 키가 없이 축약 함수가 만들어 낸 불규칙적인 효과는 수학적인 변환 작업을 바탕으로 한다. 이런 축약은 MDC라고 불리우며, 이와 반대로 키를 사용하는 축약을 MAC이라고 부른다.


메시지 축약의 사용

1. 데이터 무결성을 보장하는 곳에 사용된다. 이것은 수신측에서 이 데이터가 중간에 조작되었는지 안되었는지를 확인할 수 있게 해준다.

2. 데이터의 원본에 대한 인증을 제공한다. 이것은 수신측에서 그것을 보낸 사람이 실제로 자신이 주장하는 사람과 일치하는지를 알 수 있도록 해준다.

MasherMain.java

package com.crypto;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.IOException;

import java.security.MessageDigest;

import java.security.NoSuchAlgorithmException;

import sun.misc.BASE64Encoder;

public class MasherMain {

public MasherMain() {

}

private void exec(String targetFileName) {

try {

MessageDigest md = MessageDigest.getInstance("MD5");

FileInputStream fin = new FileInputStream(targetFileName);

byte[] buffer = new byte[8192];

int length;

while ( (length = fin.read(buffer)) != -1 ) {

md.update(buffer,0,length);

}

byte[] raw = md.digest();

BASE64Encoder encoder = new BASE64Encoder();

String base64 = encoder.encode(raw);

System.out.println(base64);

} catch(NoSuchAlgorithmException nalgoe) {

System.err.println(nalgoe);

} catch(FileNotFoundException fnote) {

System.err.println(fnote);

} catch(IOException ioe) {

System.err.println(ioe);

}

}

public static void main(String[] args) {

if(args.length < 1) {

System.out.println("USE : java MasherMain [File Full Path]");

System.exit(0);

}

String targetFileName = args[0];

MasherMain masher = new MasherMain();

masher.exec(targetFileName);

}

}


MessageDigest.getInstance("MD5");에서 “MD5”은 메시지 축약 알고리즘을 나타내며 종류는 MD5, SHA-1, SHA-256, SHA-384, SHA-512 등이 있다.


728x90

'오래된글 > Java' 카테고리의 다른 글

자바을 이용한 암호학 - 4  (0) 2018.04.07
자바을 이용한 암호학 - 3  (0) 2018.04.07
자바을 이용한 암호학 - 1  (0) 2018.04.07
Java HotSpot VM Options  (0) 2018.04.07
Java 8 Date/Time API  (0) 2018.04.07
Comments