2010-05-06 5 views
2

나는 javax.crypto를 사용하여 메시지를 암호화하고 해독하는 정적 메서드로 클래스를 수행하고 있습니다. 나는 ecipher와 dcipher를 사용하여 supossed를 수행하기 위해 정적 변수 인 일부 변수를 초기화해야하는 2 가지 정적 메소드를 가지고있다. 하지만 내가 그것을 사용하려고하면 매개 변수와 함께 InvalidKeyException을 얻는다. ecipher.init (...). 이유를 찾을 수 없습니다.Java : 암호 패키지 (암호화 및 암호 해독). 잘못된 키 오류

private static byte[] raw = {-31, 17, 7, -34, 59, -61, -60, -16, 
           26, 87, -35, 114, 0, -53, 99, -116, 
          -82, -122, 68, 47, -3, -17, -21, -82, 
          -50, 126, 119, -106, -119, -5, 109, 98}; 
    private static SecretKeySpec skeySpec; 
    private static Cipher ecipher; 
    private static Cipher dcipher; 

    static { 
     try { 
      skeySpec = new SecretKeySpec(raw, "AES"); 
      // Instantiate the cipher 
      ecipher = Cipher.getInstance("AES"); 
      dcipher = Cipher.getInstance("AES"); 
      ecipher.init(Cipher.ENCRYPT_MODE, skeySpec); 
      dcipher.init(Cipher.DECRYPT_MODE, skeySpec); 
     } catch (NoSuchAlgorithmException e) { 
      throw new UnhandledException("No existe el algoritmo deseado", e); 
     } catch (NoSuchPaddingException e) { 
      throw new UnhandledException("No existe el padding deseado", e); 
     } catch (InvalidKeyException e) { 
      throw new UnhandledException("Clave invalida", e); 
     } 
    } 
+0

스택 추적을 게시하십시오. –

+0

Unlimited Jurisdiction Crypto Policy 파일을 설치 했습니까? –

답변

4

AES-256 (및 AES-192)에는 JRE에 대해 무제한 강도 관할 정책 파일 (마지막 다운로드 한 번은 http://java.sun.com/javase/downloads/index.jsp)이 설치되어 있어야합니다. 이 지원이 없으면 클래스에서와 같이 192 또는 256 비트 키를 사용할 때 InvalidKeyException이 발생합니다.

무제한의 강도가없는 AES의 최대 허용 키 크기는 JCA Reference Guide for Java 6에 문서화되어 있으며, 이는 128 비트가됩니다.

+0

이것이 문제였습니다. – msemelman

+0

JCE 업데이트 후에 무엇을 했습니까? 나는 이클립스를 재시작했지만 여전히 동일하다. –

1

된 SecretKeySpec 문서에서 : 다음 지정된 바이트가 참으로 지정된 알고리즘의 비밀 키를 지정하면

이 생성자는 확인하지 않습니다 여기에 코드입니다. 예제의 경우 알고리즘이 DES 인 경우이 생성자는 키가 8 바이트인지 확인하지 않으며 약하거나 반 약한 키의 경우 을 확인하지 않습니다. 이러한 검사를 수행하려면 순서로 알고리즘 특정 키 지정 클래스 (이 경우 : DESKeySpec) 을 사용해야합니다.

귀하의 바이트가 AES의 유효한 키와 일치하지 않는 것 같습니다. Here 생성 방법에 대한 예를 찾을 수 있습니다. Suerte.

업데이트 : here도 참조하십시오.

업데이트 2 : 다른 답변에서 알 수 있듯이 시스템에서 AES 256을 지원하지 않으므로 raw는 확실하지 않습니다. 16 바이트 (128 비트)로 줄이고 다시 시도하십시오.