AES加密需要配置参数
//AES参数: 加密模式CBC(系统默认) 填充方式:PKCS7Padding 字符集:utf8 输出:base64 NSString const *AESKey = @"keykeykey"; //AESKey NSString const *AESVector = @"123456789"; //初始向量 uint32_t const AESFillType = kCCOptionPKCS7Padding; //填充方式 size_t const AESKeySize = kCCKeySizeAES128; //字符集
加密
-(NSString *)KAES128Encrypt:(NSString *)str{ NSData *contentData = [str dataUsingEncoding:NSUTF8StringEncoding]; NSUInteger dataLength = contentData.length; // 为结束符'\0' +1 char keyPtr[AESKeySize + 1]; memset(keyPtr, 0, sizeof(keyPtr)); [AESKey getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding]; // 密文长度 <= 明文长度 + BlockSize size_t encryptSize = dataLength + kCCBlockSizeAES128; void *encryptedBytes = malloc(encryptSize); size_t actualOutSize = 0; NSData *initVector = [AESVector dataUsingEncoding:NSUTF8StringEncoding]; CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmAES, // 系统默认使用 CBC,然后指明使用 PKCS7Padding AESFillType, keyPtr, AESKeySize, initVector.bytes, contentData.bytes, dataLength, encryptedBytes, encryptSize, &actualOutSize); if (cryptStatus == kCCSuccess) { // 对加密后的数据进行 base64 编码 return [[NSData dataWithBytesNoCopy:encryptedBytes length:actualOutSize] base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithLineFeed]; } free(encryptedBytes); return nil; }
解密
-(NSString *)KAES128Dencrypt:(NSString *)str{ NSData *contentData = [[NSData alloc] initWithBase64EncodedString:str options:NSDataBase64DecodingIgnoreUnknownCharacters]; NSUInteger dataLength = contentData.length; char keyPtr[AESKeySize + 1]; memset(keyPtr, 0, sizeof(keyPtr)); [AESKey getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding]; size_t decryptSize = dataLength + kCCBlockSizeAES128; void *decryptedBytes = malloc(decryptSize); size_t actualOutSize = 0; NSData *initVector = [AESVector dataUsingEncoding:NSUTF8StringEncoding]; CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt, kCCAlgorithmAES, AESFillType, keyPtr, AESKeySize, initVector.bytes, contentData.bytes, dataLength, decryptedBytes, decryptSize, &actualOutSize); if (cryptStatus == kCCSuccess) { return [[NSString alloc] initWithData:[NSData dataWithBytesNoCopy:decryptedBytes length:actualOutSize] encoding:NSUTF8StringEncoding]; } free(decryptedBytes); return nil; }
转载请注明来源: IOSAES加密与解密 - 朱凯博客
支付宝
微信