AES256 암호화 / 복호화 오류 + IOS SDK 7

힌두 인

보안을 위해 AES256을 사용하고 있으며 IOS 6 이하에서 잘 작동하는 암호화 형식으로 데이터를 저장하지만 IOS 7에서 내 앱을 테스트했을 때 이전에 저장되었던 데이터를 얻지 못합니다. 디버그 후 복호화가 작동하지 않음을 발견하면 IOS 7이 공백을 리턴합니다.

내 코드는 다음과 같습니다.

- (NSData *)AES256DecryptWithKey:(NSString *)key {
// 'key' should be 32 bytes for AES256, will be null-padded otherwise

char keyPtr[kCCKeySizeAES256+1]; // room for terminator (unused)


bzero(keyPtr, sizeof(keyPtr)); // fill with zeroes (for padding)
// fetch key data
[key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];
 NSUInteger dataLength = [self length];
//See the doc: For block ciphers, the output size will always be less than or
//equal to the input size plus the size of one block.
//That's why we need to add the size of one block here
size_t bufferSize = dataLength + kCCBlockSizeAES128;
void *buffer = malloc(bufferSize);
size_t numBytesDecrypted = 0;
CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding,
                                      keyPtr, kCCKeySizeAES256,
                                      NULL /* initialization vector (optional) */,
                                      [self bytes], dataLength, /* input */
                                      buffer, bufferSize, /* output */
                                      &numBytesDecrypted);
if (cryptStatus == kCCSuccess) {
    //the returned NSData takes ownership of the buffer and will free it on deallocation
    return [NSData dataWithBytesNoCopy:buffer length:numBytesDecrypted];
}
free(buffer); //free the buffer;
return nil;

}

IOS 7에서 데이터를 다시 가져 오도록 도와 주시겠습니까?

감사

Langtind

Apple Devforums 에서이 문제에 대한 해결책을 찾았 습니다 .

- (NSData *)encrypt:(NSString *)key {
 // 'key' should be 32 bytes for AES256, will be null-padded otherwise
 char keyPtr[kCCKeySizeAES256+1]; // room for terminator (unused)
 bzero(keyPtr, sizeof(keyPtr)); // fill with zeroes (for padding)

 BOOL patchNeeded = ([key length] > kCCKeySizeAES256);
 if (patchNeeded) {
      key = [key substringToIndex:kCCKeySizeAES256]; // Ensure that the key isn't longer than what's needed (kCCKeySizeAES256)
 }

 // fetch key data
 [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];

 if (patchNeeded) {
      keyPtr[0] = '\0';  // Previous iOS version than iOS7 set the first char to '\0' if the key was longer than kCCKeySizeAES256
 }

 NSUInteger dataLength = [self length];

 //See the doc: For block ciphers, the output size will always be less than or
 //equal to the input size plus the size of one block.
 //That's why we need to add the size of one block here
 size_t bufferSize = dataLength + kCCBlockSizeAES128;
 void *buffer = malloc(bufferSize);

 size_t numBytesEncrypted = 0;
 CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding,
                                                keyPtr, kCCKeySizeAES256,
                                                NULL /* initialization vector (optional) */,
                                                [self bytes], dataLength, /* input */
                                                buffer, bufferSize, /* output */
                                                &numBytesEncrypted);
 if (cryptStatus == kCCSuccess) {
      //the returned NSData takes ownership of the buffer and will free it on deallocation
      return [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted];
 }

 free(buffer); //free the buffer;
 return nil;
}

물론 해독 방법에 대해 동일한 패치를 복사하여 붙여 넣으십시오.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Rijndael 256 비트 암호화 / 복호화에서 오류 발생

분류에서Dev

Node.js Crypto aes256 Cipher를 암호화-복호화하는 방법

분류에서Dev

Matlab에서 AES256으로 이미지 암호화 / 복호화

분류에서Dev

Objective-C에서 PHP AES256 암호화 호환성

분류에서Dev

AES256 암호화 바이트 해독

분류에서Dev

C # AES256 암호화 파일 해독

분류에서Dev

iOS에서 256 블록 크기의 AES 256 비트 암호화

분류에서Dev

Aes256-cbc 인코딩 / 복호화 오류

분류에서Dev

AES 128 비트 및 AES 256 비트 암호화 복호화

분류에서Dev

iOS AES / CBC / PKCS7에서 암호화 된 문자열 복호화 문제 Android에서 128 비트 알고리즘 추가

분류에서Dev

AES / CBC / NoPadding 암호화 및 복호화

분류에서Dev

AES256 암호화 텍스트를 해독 할 수 없습니다.

분류에서Dev

AES256 JAVA 암호화가 C # 암호화와 일치하지 않습니다.

분류에서Dev

AES 256 비트 CBC PKCS # 5 Python에서 암호화 / 복호화

분류에서Dev

가장 높은 암호화를 사용하는 7z 명령 줄 : AES-256 + 파일 이름 암호화

분류에서Dev

CryptoJS AES 256 ECB 복호화

분류에서Dev

AES 256 및 Base64 암호화 문자열은 iOS 8에서 작동하지만 iOS 7에서는 잘림

분류에서Dev

Java를 사용한 AES-256-GCM 복호화의 태그 불일치 오류

분류에서Dev

gpg로 복호화 할 수있는 대칭 AES256을 사용하여 Ruby로 파일을 어떻게 암호화합니까?

분류에서Dev

AES-256 암호화를 사용하는 Linux의 7-zip 파일

분류에서Dev

Java 7에 암호화 제품군 TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 추가

분류에서Dev

Java 암호화 : NoSuchAlgorithmException 오류

분류에서Dev

Rsa 암호화 복호화의 잘못된 길이 오류

분류에서Dev

openssl 오류가있는 문자열 암호화 / 복호화

분류에서Dev

Python의 소켓에서 AES 암호화 오류

분류에서Dev

AES 암호화 C #에 사용중인 키 크기 오류

분류에서Dev

AES CBC 암호화 pycrypto 2.6의 알 수없는 오류

분류에서Dev

AES 암호화 중 javax.crypto.BadPaddingException 오류

분류에서Dev

Objective c로 AES iOS 복호화

Related 관련 기사

  1. 1

    Rijndael 256 비트 암호화 / 복호화에서 오류 발생

  2. 2

    Node.js Crypto aes256 Cipher를 암호화-복호화하는 방법

  3. 3

    Matlab에서 AES256으로 이미지 암호화 / 복호화

  4. 4

    Objective-C에서 PHP AES256 암호화 호환성

  5. 5

    AES256 암호화 바이트 해독

  6. 6

    C # AES256 암호화 파일 해독

  7. 7

    iOS에서 256 블록 크기의 AES 256 비트 암호화

  8. 8

    Aes256-cbc 인코딩 / 복호화 오류

  9. 9

    AES 128 비트 및 AES 256 비트 암호화 복호화

  10. 10

    iOS AES / CBC / PKCS7에서 암호화 된 문자열 복호화 문제 Android에서 128 비트 알고리즘 추가

  11. 11

    AES / CBC / NoPadding 암호화 및 복호화

  12. 12

    AES256 암호화 텍스트를 해독 할 수 없습니다.

  13. 13

    AES256 JAVA 암호화가 C # 암호화와 일치하지 않습니다.

  14. 14

    AES 256 비트 CBC PKCS # 5 Python에서 암호화 / 복호화

  15. 15

    가장 높은 암호화를 사용하는 7z 명령 줄 : AES-256 + 파일 이름 암호화

  16. 16

    CryptoJS AES 256 ECB 복호화

  17. 17

    AES 256 및 Base64 암호화 문자열은 iOS 8에서 작동하지만 iOS 7에서는 잘림

  18. 18

    Java를 사용한 AES-256-GCM 복호화의 태그 불일치 오류

  19. 19

    gpg로 복호화 할 수있는 대칭 AES256을 사용하여 Ruby로 파일을 어떻게 암호화합니까?

  20. 20

    AES-256 암호화를 사용하는 Linux의 7-zip 파일

  21. 21

    Java 7에 암호화 제품군 TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 추가

  22. 22

    Java 암호화 : NoSuchAlgorithmException 오류

  23. 23

    Rsa 암호화 복호화의 잘못된 길이 오류

  24. 24

    openssl 오류가있는 문자열 암호화 / 복호화

  25. 25

    Python의 소켓에서 AES 암호화 오류

  26. 26

    AES 암호화 C #에 사용중인 키 크기 오류

  27. 27

    AES CBC 암호화 pycrypto 2.6의 알 수없는 오류

  28. 28

    AES 암호화 중 javax.crypto.BadPaddingException 오류

  29. 29

    Objective c로 AES iOS 복호화

뜨겁다태그

보관