2012-11-20 4 views
3

연습으로 저는 CBC 및 CTR 모드를 구현하고 있습니다. (예 : CBC의 첫 번째 블록에 대해 E(k, IV xor message[0]).Java 암호화 AES 기능

예를 들어, 나는 (BouncyCastle 포함) 내 E 함수로 그것을 사용할 수있는 다음과 같은 생각을 시도 :

Cipher cipher = Cipher.getInstance("AES/NONE/PKCS5", "BC"); 

하지만 '없음'옵션을 선택하지 않습니다.

내 질문은 어떻게 내 목적을 위해 자바 AES 기능을 사용하는 것입니다; 어떻게해야합니까 E(k, ...)?

+0

NONE 대신 ECB를 사용해보십시오. – erickson

답변

4

일반적으로 고유 한 암호를 작성하려면 블록 모드 작업에 액세스해야합니다. 고급 기능에만 액세스 할 수있는 경우 패딩이 지정되지 않은 상태에서 ECB 모드 암호화를 사용해야합니다. ECB 모드는 암호문과 키가 주어진 각 블록을 독립적으로 변환합니다. 패딩은 블록 모드 작업과 마지막 블록에 대해서만 수행해야합니다.

Java 암호화 아키텍처에서 이것을 사용하려면 "AES/ECB/NoPadding" 모드를 사용하십시오.

3

Java Crypto API에 암호 구현을 제공하는 것은 사용자 지정 Cipher 인스턴스를 제공하는 사용자 지정 Provider를 만들고 설치하여 수행하는 것으로 생각합니다. Here is a nice piece of manual about it.

+0

그러나 AES는 암호화 구현 (BouncyCastle이 처리하는)이 아닙니까? CBC 모드를 구현하기 위해 AES 기능을 연결하기 만하면됩니다. – LanguagesNamedAfterCofee

+0

"AES/NONE/PKCS5"가'Provider '에 전달되어 반환 할'Cipher '를 선택하는 상황을 생각합니다. "none"은'Provider'에 알려진 모드가 아니기 때문에 반환 할'Cipher'를 찾을 수 없습니다. 이 시점에서 Bouncy Castle 공급자를 확장하여 "none"모드를 사용해야한다고 생각하거나 실제로 원하는 모드를 구현하는 Cipher를 반환 할 가능성이 가장 높습니다. 다른 AES 암호 확장은 나쁜 생각이 아닐 수도 있습니다. –

+0

고마워, 나는 클래스 '암호'의 목적을 오해했다. org.bouncycastle.crypto.engines.AESEngine'을 사용하고 거기에서 작업하면됩니다. – LanguagesNamedAfterCofee