3-2공부/네트워크프로그래밍

[Java] 암호화

KGW2027 2022. 10. 22. 17:14
728x90
반응형

Java에서 암호화를 구현하는 스트림은 두 종류가 있다.

java.security.DigestStream

javax.crypto.CypherStream

이름만 봤을 때 CypherStream쪽이 좀 더 전문성이 있어보이지만,

아쉽게도 수업 시간에는 DigestStream에 대한 부분만 배웠다.

 

Digest는 HashCode와 같은 말로, 데이터가 전송도중 변조되었는지의 여부를 알아내기 위해 사용한다.

이러한 코드를 만드는 Hash Function은 다음과 같은 조건을 만족해야 하는데,

Strong : 동일한 해시 값이 나오는 일이 거의 불가능해야 한다.

One-way : 원문을 리버스 엔지니어링하는것이 매우 어려워야한다.

Deterministic : 동일한 입력에 늘 같은 출력을 보여야한다.

Uniformly Distributed Hash Code : 출력값의 분포가 균등해야 한다.

Sensitive Dependency : 작은 변화로도 해시값에는 큰 변화가 일어나야 한다.

Hash Code doesn't say anything about document : 원문에 대한 정보를 반영할 수 있으면 안된다.

※ java.util.HashTable.hashCode()는 위 조건을 만족하지 못한다.

 

DigestStream에서 사용할 HashAlgorithm은 SHA, MD5 등의 알고리즘이 존재하는데,

이런 알고리즘을 이용하기 위해 미리 구현된 MessageDigest 클래스를 이용해야한다.

MessageDigest.getInstance("SHA"); // SHA 알고리즘

MessageDigest.getInstance("MD5"); // MD5 알고리즘

update() 함수를 이용해 데이터를 입력하고, digest() 함수로 암호화 한다.

 


java.security.MessageDigest

extends MessageDigestSpi ( 암호화 관련 SPI )


 - 생성자 ( Singleton )

MessageDigest.getInstance(Algorithm[, provider]) : 생성자가 아닌 싱글톤으로 객체를 받는다.

 

 - 지역 함수 ( Local Methods )

update(Byte) : 암호화 시킬 바이트 데이터를 입력한다.

digest() : 입력된 데이터를 암호화한다.

getAlgorithm() : 사용될 암호화 기법

getDigestLength() : 암호화된 데이터의 길이

 


 

java.security.DigestInputStream

extends FilterInputStream


- 생성자 ( Constructor )

new DigestInputStream(InputStream is, MessageDigest digest)

 

- 지역 함수 ( Local Methods )

setMessageDigest(Digest) : 암호화 기법을 변경한다.

on(bool) : digest function의 온오프

read() : digest function의 온오프에 따라 데이터를 읽고 암호화한다.

 


 

java.security.DigestOutputStream

extends FilterOutputStream


- 생성자 ( Constructor )

new DigestOutputStream(OutputStream os, MessageDigest digest)

 

- 지역 함수 ( Local Methods )

setMessageDigest(Digest) : 암호화 기법을 변경한다.

on(bool) : digest Function의 온오프

write(byte[, offset, length]) : digest function의 온오프에 따라 데이터를 암호화하고 출력한다.


 

728x90
반응형

'3-2공부 > 네트워크프로그래밍' 카테고리의 다른 글

[Java] 네트워크  (0) 2022.12.08
[Java] 압축  (0) 2022.10.22
[Java] Serialize, 직렬화  (0) 2022.10.22
[Java] Writer  (0) 2022.10.22
[Java] Reader  (0) 2022.10.22