본문 바로가기

Java/Common

[암호화] JCA & JCE

JCA & JCE

1     설명

가)    JCA는 Runtime enviroment의 일부

나)  JCE는 JDK에 들어 있지 않은 JCA의 확장팩

나)    JDK는 JCA에 정의된 특정한 암호 함수만 사용 가능

 

2     JCA

가)    전자 서명과 메시지 다이제스트 같은 기능에 대한 일반적인 API 제공

 

나)    주요 클래스들

①     MessageDigest

②     Signature

③     KeyPaireGenerator

④     KeyFactory

⑤     CertificateFactory

⑥     KeyStore

⑦     AlgorithmParameters

⑧     AlgorithmParameterGenerator

⑨     SecureRandom

 

다)    암호 서비스 제공자 Sun Provider(Java 2 기준, sun.security.provider.Sun)

①     MD5 메시지 다이제스트

②     SHA-1 메시지 다이제스트

③     DSA 전자 서명 사인과 검증

④     DSA 키 쌍 생성

⑤     DSA 키 변환

⑥     X.509 인증서 생성

⑦     Proprietary keystore 구현

⑧     DSA 알고리즘 매개변수

⑨     DSA 알고리즘 매개변수 생성

 

라)    암호 서비스 제공자 RSAJAC provider(com.sun.rsajca.Provider)

①     RSA 키 쌍 생성

②     RSA 키 변환

③     SHA-1 또는 MD5 메시지 다이제스트를 이용한 RSA 서명

 

마)    JCA 접근

 MessageDigest myMessageDigest = MessageDigest.getInstance(“MD5”);

myMessageDigest.update(myData);

byte[] signatureBytes = myMessageDigest.digest();

 

 

3     JCE(javax.crypto)

가)    주요 클래스와 인터페이스

①     Cipher

②     KeyAgreement

③     KeyGenerator

④     Mac

⑤     SecretKey

⑥     SecretKeyFactory

 

나)    JCE 접근 

KeyGenerator keyGenerator = KeyGenerator.getInstance(“Blowfish”);

Key key = keyGenerator.generatorKey();

Cipher cipher = Cipher.getInstance(“Blowfish/ECB/PKCS5Padding”);

cipher.init(Cipher.ENCRYPT_MODE, key);

byte[] cipherText = cipher.doFinal(myData);

  

다)    JCE 설치

이름

BouncyCastle

URL

http://www.bouncycastle.org

라이선스

오픈소스

참고문서

http://www.bouncycastle.org/docs/docs1.6/index.html

 

 

보통 썬의 JCE를 사용하기를 원하지만 일단 Sun의 JCE가 설치되고 나면 다른 것을 사용하지 못한다. 즉 Sun의 JCE는 DES, TripleDEs, Blowfish, Difie-Hellman외에는 사용할 수가 없다. 따라서 Bouncy Castle를 추천한다.

 

라)    Bouncy Castle 설치 (http://id0min.tistory.com/125 참조함)

①     http://www.bouncycastle.org/latest_releases.html에서 자신의 JDK 버전에 해당되는 최신 버전을 다운로드 받는다. 다운받은 파일을 JDK과 JRE가 설치된 폴더에서 jre/lib/ext에 저장한다.

②     양쪽 폴더에서 jre/lib/security 폴더에 있는 java.security 파일을 다음과 같이 수정한다. 숫자 10은 provider 순서에 따라 수정한다.

security.provider.10=org.bouncycastle.jce.provider.BouncyCastleProvider

③     unrestricted policy 파일들을 다운로드 받아  양쪽 폴더에서 jre/lib/security 폴더에 local_policy.jar와 US_export_policy.jar 파일을 교체한다. 아래 URL에서 파일을 다운로드 받아서 풀어보면 위의 2개 파일 있다. 덮어 씌우면 된다.

④     설치한 후에 동작하는지 검증한다.

 

       마)    테스트 소스

 public static void main(String[] args) {

String providerName = "BC";

KeyGenerator keyGenerator = null;

if(Security.getProvider(providerName) == null)

System.out.println(providerName + " provider not installed");

else

       System.out.println(providerName + " is installed");

// Blowfish는 블록 암호화 방식

System.out.println("Attepting to get a Blowfish key...");

try {

keyGenerator = KeyGenerator.getInstance("Blowfish");

} catch (NoSuchAlgorithmException e) {

}

keyGenerator.init(128);

SecretKey key = keyGenerator.generateKey();

System.out.println("OK");

//암호화 한다

            

System.out.println("Attempting to get a Cipher and encrypt...");

Cipher cipher = null;

byte[] ciphertext = null;

try {

       cipher = Cipher.getInstance("Blowfish/ECB/PKCS5Padding");

} catch (NoSuchAlgorithmException e) {}

catch (NoSuchPaddingException e) {}

try {

       cipher.init(Cipher.ENCRYPT_MODE, key);

} catch (InvalidKeyException e) {}

try {

       ciphertext = cipher.doFinal("This is a test".getBytes("UTF8"));

} catch (IllegalBlockSizeException e) {}

catch (BadPaddingException e) {}

catch (UnsupportedEncodingException e) {}

System.out.println("OK");

System.out.println("Test completed successfully : " + ciphertext);

}


(http://www.oracle.com/technetwork/java/javase/downloads/jce-6-download-429243.html)


출처 : http://sinpk.tistory.com/entry/%EC%95%94%ED%98%B8%ED%99%94-JCA-JCE



'Java > Common' 카테고리의 다른 글

[java]Calendar 사용법  (0) 2015.05.29
[java]object byte 상호변환  (0) 2014.11.14
[java]한글 초성, 중성, 종성 분리  (0) 2014.10.24