ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Xcode #2] 누수찾기 AES256DecryptWithKey
    카테고리 없음 2023. 7. 13. 11:15

    누수란? 메모리가 해제되지않는것도  누수라고한다.

     

    똑같은 시간을 비교해봣을때 메모리 증가가 여기는 1.6GiB

     

    여기는 1.55GIB 조끔은 나아졋음을 확인했다.

     

     

    이 부분의 문제점은 

    + (NSData *)AES256DecryptWithKey:(uint8_t *)key iv:(uint8_t *)iv data:(uint8_t *)data dataSize:(int)size {
        size_t bufferSize = size + kCCBlockSizeAES128;
        void *buffer = malloc(bufferSize);
        size_t decryptedSize = 0;
        CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt,
                                              kCCAlgorithmAES,
    //                                          kCCOptionPKCS7Padding + kCCOptionECBMode,   // ecb mode
                                              kCCOptionPKCS7Padding,    // cbc mode
                                              key, kCCKeySizeAES256,    // key
                                              iv,                       // initialization vector (optional)
                                              data, size,               // input
                                              buffer, bufferSize,       // output
                                              &decryptedSize);
        if (cryptStatus == kCCSuccess) {
    //        return NSData dataWithBytesNoCopy:buffer length:decryptedSize];
    return [[NSData alloc] initWithData:[NSData dataWithBytesNoCopy:buffer length:decryptedSize]];
        }
       
        free(buffer);
        return nil;
    }

    이렇게 바꿔서 처리했다.

     

    이렇게 처리했더니 누수가 또 생겼다.

     

    + (NSData *)AES256DecryptWithKey:(uint8_t *)key iv:(uint8_t *)iv data:(uint8_t *)data dataSize:(int)size {
        size_t bufferSize = size + kCCBlockSizeAES128;
        void *buffer = malloc(bufferSize);
        size_t decryptedSize = 0;
        NSData *decrypted = [[NSData alloc] init];
        CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt,
                                              kCCAlgorithmAES,
    //                                          kCCOptionPKCS7Padding + kCCOptionECBMode,   // ecb mode
                                              kCCOptionPKCS7Padding,    // cbc mode
                                              key, kCCKeySizeAES256,    // key
                                              iv,                       // initialization vector (optional)
                                              data, size,               // input
                                              buffer, bufferSize,       // output
                                              &decryptedSize);
        if (cryptStatus == kCCSuccess) {
            decrypted = [NSData dataWithBytes:buffer length:decryptedSize];
            free(buffer);
            return decrypted;
        }
       
        free(buffer);
        return nil;
    }

    이렇게 처리하니가 누수 발생 안하고 누수도 줄었다.. 

     

Designed by Tistory.