2014-11-03 2 views
0

나, 데이터를 암호화하고 해독하는 java 메소드를 작성했습니다.cipertext - AES, Java의 파티션을 해독하는 방법

String message = "Hello world 123456"; 

    // Creating Key. Key of size = 128 
    byte [] raw ={-49, -44, 51, -114, 58, 79, 83, -38, 107, 64, 67, -108, -52, 109, 85, 77}; 
    SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES"); 
    Cipher cipher = Cipher.getInstance("AES"); 
    cipher.init(Cipher.ENCRYPT_MODE, skeySpec); 

    // Encript 
    byte[] encrypted = cipher.doFinal(message.getBytes()); 
    System.out.println("encripted: " + Arrays.toString(encrypted)); 
    System.out.println("encripted: "+ asHex(encrypted)); 

    cipher.init(Cipher.DECRYPT_MODE, skeySpec); 
    byte[] decript = cipher.doFinal(encrypted, 0, 32); 

모든 것이 잘 작동합니다. 암호화 된 바이트 크기는 32입니다. 맞습니다. 하지만 부분을 부분적으로 dencrypt (차단 - 예를 들어 첫 번째 블록을 해독 한 다음 두 번째) 할 수 있습니까? 처음에는 16 바이트를, 2 바이트 째는 16 바이트 등으로 씁니다.

이 될 수 있습니다.

byte[] decript = cipher.doFinal(encrypted, 0, 16); 

내가 같은 오류가 : 다른 단어에서

javax.crypto.BadPaddingException: Given final block not properly padded 

을 내가 AES 암호 텍스트를 해독 할 수, 블록 차단?

업데이트 : 나는 비디오 파일을 암호화했습니다. 약 1GB입니다. 내 비디오 플레이어를 쓰고 싶습니다. 그러면 내 파일이 열립니다. 전체 비디오에 대해 설명을하면 메모리에 문제가있을 것입니다. 그래서 스트림 플레이어의 바이트를 내 플레이어에게 보냅니다 (차단할 블록). 이를 위해 AES를 사용할 수 있습니까?

+0

왜 하시겠습니까? –

+0

나는 비디오 파일을 암호화했다. 약 1GB입니다. 내 비디오 플레이어를 쓰고 싶습니다. 그러면 내 파일이 열립니다. 전체 비디오에 대해 설명을하면 메모리에 문제가있을 것입니다. 그래서 스트림 플레이어의 바이트를 내 플레이어에게 보냅니다 (차단할 블록). 이를 위해 AES를 사용할 수 있습니까? – grep

+0

아니요, 항상 파일의 시작 부분부터 시작하지 않는 한 할 수 없습니다. http://en.wikipedia.org/wiki/Disk_encryption_theory – SLaks

답변

0

현재 ECB 모드 암호화를 사용하여 암호화하고 있습니다. Cipher의 알고리즘 문자열 "AES"은 암호화 및 패딩 모드에 공급자 기본값을 사용합니다. "AES/ECB/PKCS5Padding" (실제로는 PKCS # 7 패딩을 실행한다)으로 해석되는 SunJCE의 경우.

ECB는 16 바이트 블록의 암호를 암호화합니다. 즉, 메시지는 개념적으로 16 바이트 블록의 연결로 변환되고 각 블록은 별도로 암호화됩니다. 각 블록이 별도로 암호화되므로 블록을 별도로 해독 할 수도 있습니다. 즉, 블록 경계에서 시작하여 블록 x 배를 해독하는 것을 의미합니다. 마지막 블록에 도달 할 때까지 PKCS # 7 패딩을 수행하지 않으려면 doFinal 메서드 대신 update 메서드를 사용하거나 "AES/ECB/NoPadding"을 사용할 수 있습니다.

파일을 암호화하려면 java.nioCipher 메서드를 사용하여 입력/출력을 ByteBuffer으로 지정해야합니다.


이것은 직접적인 대답입니다. ECB 모드 암호화를 사용해서는 안됩니다. 스트림의 기밀성을 제공하기 위해 키/파일 조합 당 고유 IV (nonce)와 함께 CTR을 사용합니다.

관련 문제