天天看點

iOS開發 AES+Base64

```objectivec
size_t const kKeySize = kCCKeySizeAES128;

NSString *const kInitVector = @"16-Bytes--String";

- (NSString *)encryptAES:(NSString *)content key:(NSString *)key {

    NSData *contentData = [content dataUsingEncoding:NSUTF8StringEncoding];

    NSUInteger dataLength = contentData.length;
           
// 為結束符'\\0' +1

char keyPtr[kKeySize + 1];

memset(keyPtr, 0, sizeof(keyPtr));

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

    // 密文長度 <= 明文長度 + BlockSize

   

```objectivec
 size_t encryptSize = dataLength + kCCBlockSizeAES128;

    void *encryptedBytes = malloc(encryptSize);

    size_t actualOutSize = 0;

    NSData *initVector = [kInitVector dataUsingEncoding:NSUTF8StringEncoding];

    CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt,

                                          kCCAlgorithmAES,

                                          kCCOptionPKCS7Padding,  // 系統預設使用 CBC,然後指明使用 PKCS7Padding

                                          keyPtr,

                                          kKeySize,

                                          initVector.bytes,

                                          contentData.bytes,

                                          dataLength,

                                          encryptedBytes,

                                          encryptSize,

                                          &actualOutSize);

    if (cryptStatus == kCCSuccess) {

        // 對加密後的資料進行 base64 編碼

        return [[NSData dataWithBytesNoCopy:encryptedBytes length:actualOutSize] base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithLineFeed];

    }

    free(encryptedBytes);

    return nil;

}
           

繼續閱讀