2011-09-29 5 views
0

웹 서비스에서받은 AES 암호화 데이터를 디코딩하려고합니다. 암호화 길이는 : 4256 바이트 암호 해독 된 길이는 : 4247 바이트Android - AES 암호 해독에 이상한 콘텐츠 길이가 없음

Baiscally 난 그 때문에 일부 패딩이나 뭐 ... 하지만의 확인이 될 것입니다 생각합니다. 데이터는 실제로 평문 텍스트를 해독합니다. 끝에서 일부 문자가 누락 된 것을 제외하고는.

마지막에 누락 된 문자가 표시 될 수있는 이유는 무엇입니까? 파울로 말한대로

public static byte[] decrypt(byte[] input) throws Exception { 
    byte[] rawKey = getKey("bla".getBytes()); 
    SecretKeySpec secretKeySpec = new SecretKeySpec(rawKey, "AES"); 
    Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding"); 
    AlgorithmParameterSpec iv = new IvParameterSpec(new byte[] { 0, 0, 0, 
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }); 
    cipher.init(Cipher.DECRYPT_MODE, secretKeySpec, iv); 
    return cipher.doFinal(input); 
} 
+0

당신 (또는 웹 서비스, 실제로) 암호화에 동일한 모드 (특히 패딩)를 사용 했습니까? –

+1

참고 : 상수 초기화 벡터가있는 CBC는 보안 모드가 아닙니다. 각 메시지에 대해 임의로 생성 된 새 초기화 벡터를 사용하고 메시지와 함께 전송하려고합니다. –

+0

나도 알아,하지만 불행히도 나는 서버 쪽 코드에 액세스 할 수 없으며 이것은 서버 쪽 (.NET)에서 암호화를 수행하는 데 사용되는 구성입니다. 그리고 그것은 텍스트의 90 %가 corretly 해독 된 이후로 작동하는 것 같습니다 ... – Goddchen

답변

0

, 문제는 패딩에 거의 확실하다 :

여기 내 암호 해독 코드를 온다. 패딩이없는 시험 decrypt()을 설정하십시오 : "AES/CBC/NoPadding"IIRC. 동일한 암호문을 해독하고 메시지의 끝에 추가 된 패딩의 실제 바이트를 살펴보십시오. 그게 어떤 패딩이 실제로 메시지에 추가되는지 알려줄 것입니다. 이 코멘트 :(문제가 해결

너무 오래 때문에

2

, 그것은 오류. 암호 해독을 일으키는 해독이었다 결코 대답으로이 게시 괜찮습니다.

실제 문제가 저를했다, 문자열을 json 배열로 변환하려고 시도했을 때 012SJA 객체가있는 동안 문자열을 json 객체로 변환하려고합니다. 실제 json 오류 메시지에 마스크 된 4K 문자의 logcat 제한과 결합하여 디버그 메시지를 차단했습니다 (누락 된 문자가 없었습니다.).) ...

관련 문제