2011-07-04 4 views
2

Java에서 AES 암호화 및 암호 해독 기능을 사용하려고했습니다. 불운하게 나는 다량 운이 없었다. 지금은 AES - 키를 생성하고로드하는 중 키에 잘못된 키 예외가 발생합니다.

keyGen = KeyGenerator.getInstance("AES"); 
SecureRandom random = SecureRandom.getInstance(); 
keyGen.init(size, random); 
SecretKey key = keyGen.generateKey(); 
AesKey = key.getEncoded(); 

내가 다시 SecretKeySpec 프로로 변환 키를 사용하여 입력 바이트를 암호화하는 시도 표시되는 코드하는 하나의 방법으로 키를 생성 할 수 있습니다. 내 암호화 코드는 아래와 같습니다.

SecretKeySpec keySpec = new SecretKeySpec(AesKey, "AES"); 
Cipher cipher = Cipher.getInstance("AES"); 
cipher.init(Cipher.ENCRYPT_MODE, keySpec); 
return cipher.doFinal(input); 

그러나 cipher.init 줄을 호출하면 InvalidKeyException이 발생합니다.

키를 잘못 생성합니까? 키를 잘못로드합니까? 그것은 조합입니까? 나는 어떤 통찰력이라도 고맙게 여기을 것이다.

업데이트 그래서 나는 그것을 실현하지 못했지만,이 기능을 생성 호출 된 부분은 잘못된 크기를 전달했다. 그 비트의 코드를 찾아서 256으로 변경하면 모든 것이 제대로 작동합니다.

+0

답변으로 추가 할 수 있습니까? 답이없는 질문은 시간이 지남에 따라 삭제됩니다. – Reno

+0

SecureRandom은 시드되지 않아야하며 기본 생성자를 사용해야합니다. 이렇게하면 시드에 시스템 엔트로피 풀이 사용되며 타임 스탬프를 사용하는 것보다 안전합니다. Android API 문서가 곧 업데이트 될 예정입니다. (이 변경 사항을 반영하도록 코드를 수정했습니다.) –

답변

1

generate 함수를 호출하는 코드가 잘못된 크기를 전달했습니다. 나는 그것이 keyGen.generateKey() 라인에 의해 잡힐 것이라고 생각했지만 나는 틀렸다. 실제로 키를 사용하려고 시도 할 때까지 오류가 발생하지 않았습니다. size가 256이되도록 generate 함수를 호출 한 코드를 변경하면 문제가 해결되었습니다.

관련 문제