ECIES는 적어도 현재 날짜까지는 정상적인 Java 라이브러리에는 없습니다. Bouncy Castle과 같은 도서관을 이용해야합니다.
커브의 품질을 보려면 http://safecurves.cr.yp.to (위가있는 경우)을 살펴보십시오. 도메인 매개 변수의 각 세트는 항상 키 크기에 직접 연결됩니다. 나는 Brainpool이 나 자신을 좋아한다는 것을 좋아한다. 그들은 당신이 그들을 약간주의해서 사용한다면 비교적 표준적이고 상대적으로 안전합니다.
참고 : RSA, DSA 또는 ECIES로 일반 텍스트를 직접 암호화하지 마십시오. 항상 하이브리드 암호화를 사용해보십시오. 최대 128, 192 또는 256 비트의 입력 크기와 비교하십시오.
그럼, 그만.
public static void main(String[] args) throws Exception {
Security.addProvider(new BouncyCastleProvider());
KeyPairGenerator kpg = KeyPairGenerator.getInstance("ECIES");
ECGenParameterSpec brainpoolP256R1 = new ECGenParameterSpec(
"brainpoolP256R1");
kpg.initialize(brainpoolP256R1);
KeyPair kp = kpg.generateKeyPair();
Cipher c = Cipher.getInstance("ECIES");
c.init(Cipher.ENCRYPT_MODE, kp.getPublic());
final byte[] aesKeyData = new byte[16];
SecureRandom rng = new SecureRandom();
rng.nextBytes(aesKeyData);
byte[] wrappedKey = c.doFinal(aesKeyData);
SecretKey aesKey = new SecretKeySpec(aesKeyData, "AES");
Arrays.fill(aesKeyData, (byte) 0);
}
구아바에는 멋진 'StopWatch' 클래스가 있습니다. –
ECIES는 이미 하이브리드 암호화 방식이며 AES 암호화를 실행할 것입니다. 따라서 예제 코드는 몇 가지 추가 작업을 수행합니다. –
@ RomanPlášil 예, ECIES *는 정의에 의한 것입니다. * 하이브리드 암호 시스템입니다. 기본적으로 ECDH를 사용하여 대칭 키를 설정합니다 (그리고 "보낸 사람"이 사용하는 일시적 개인 키를 버립니다). 따라서 ECIES 내의 비대칭 연산의 결과는 간단히 암호문이 아니라 비밀 키입니다. –