2014-09-02 2 views
-1

나는 잠시 동안이 작업을 해왔지만 문제를 해결할 방법을 찾을 수 없습니다. 바라건대 당신 중 한 명이 내가 누락 된 부분을 말해 줄 수 있기를 바랍니다.base64로 인코딩 된 데이터의 암호 해독 - C

NSURLConnection을 사용하여 AES128 암호화 데이터가 포함 된 base64 인코딩 데이터를 다운로드하고 있습니다. 내가 가진 것은 키, 코드 및 암호화 된 데이터의 처음 16자가 IV 인 지식입니다. 내가 원하는 것은 데이터를 해독 한 다음 키를 사용하여 암호 해독하고 iv를 추출하는 것입니다.

는 위의 코드가 성공적으로 해독 표시됩니까
- (void) connectionDidFinishLoading:(NSURLConnection *) connection { 
     NSLog(@"Succeeded! Downloaded %d bytes of data", downloadData.length); 
     NSData *decoded_EncryptedData = [downloadData base64EncodedDataWithOptions:0]; 
     NSString *decoded_EncryptedString = [[NSString alloc] initWithData: decoded_EncryptedData encoding:NSUTF8StringEncoding]; 
     const void *key = @"0000000000000000000000000000000"; // key of length 32 char -> i know standard format for AES128 encryption is 16, maybe this requires 256 AES decryption 
     const void *iv = (__bridge const void *)([decoded_EncryptedString substringWithRange:NSMakeRange(0,16)]); 
     NSString *encryptedString = [decoded_EncryptedString substringWithRange:NSMakeRange(16, decoded_EncryptedString.length-16)]; 

     // Now I have no idea what needs to happen, but from online research I found it should be something like this: 
     NSData encryptedData = [encryptedString dataUsingEncoding:NSUTF8StringEncoding]; // Writing it back into a data file 
     // Find size of returned data 
     size_t Size = encryptedData.length + kCCBlockSizeAES128; 
     // Initialise returned data 
     NSMutableData *decryptedData = [NSMutableData dataWithLength:Size]; 
     // allocate variable to numBytesDecrypted 
     size_t numBytesDecrypted; 

     CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt, kCCAlgorithmAES128, 0, KCCKeySizeAES128, iv, 
        [encryptedData bytes], [encryptedData length], [decryptedData bytes], [decryptedData length], 
        &numBytesDecrypted); 

     // Now I test whether the decryption process was successful: 
     if (cryptStatus == kCCSuccess) { 
       NSLog(@"Successfully decrypted); 
       NSString *decryptedString = [[NSString alloc] initWithData:decryptedData encoding: NSUTF8StringEncoding]; 
     } 

    } 

그러나 문자열은 null를 돌려 크기 0은 누군가가 나에게이 문제를 해결하는 데 도움이 시겠어요 : 이것은 내가 지금까지 가지고 무엇인가? 나는 너무 감사 할 것입니다.

종류와 관련, Lennaert

+0

NSData encryptedData -> NSData * encryptedData, KCCKeySizeAES128 -> [decryptedData bytes]'-> [decryptedData mutableBytes] NSLog (@ "Successfully decrypted) -> NSLog (@"성공적으로 암호 해독 됨 ") 그리고 마지막으로 핵심 매개 변수는 'CCCrypt'호출 임무입니다.이 코드가 컴파일되지 않았 음이 분명합니다. 적어도 시도한 코드를 제공하십시오. – zaph

답변

0

당신은 많은 문제가있다.

  1. 암호화가 AES128 또는 AES256인지 정말로 알아야합니다.

  2. 암호화는 문자열 기반이 아닌 데이터 기반입니다. decoded_EncryptedString 문자열로의 변환이 잘못되어서는 안됩니다.

  3. 키가 문제이며 문자열을 사용하는 것은 일반적으로 나쁜 생각이므로 데이터 바이트로 예상됩니다. 아마도 키는 16 진수로 지정되므로 32 진수 문자는 128 비트가됩니다. 그렇다면 데이터 변환이 필요할 것입니다.

  4. 'iv'및 encryptedString은 문자열이지만 데이터이어야합니다. 위의 결과는 2입니다.

  5. 키는 CCCrypt으로 전달되지 않습니다.

  6. 데이터가 거의 블록 크기가 아니기 때문에 일반적으로 패딩이 사용되므로 패딩을 CCCrypt으로 지정해야 할 수 있습니다. 패딩이 사용되었는지 알고 싶으면 PKCS7 인 경우 php는 비표준 패딩을 사용합니다.

  7. PKCS7 패딩을 사용하는 경우 결과는 변수 numBytesDecrypted을 기준으로 길이로 트리밍해야합니다. 다른 패딩이 사용되는 경우 트리밍해야합니다.

더 많은 도움이 필요하면 테스트 데이터와 결과를 제공해주십시오.

마지막으로 더 자주 다시 시도해보십시오.