本文共 1641 字,大约阅读时间需要 5 分钟。
下面的方法可以指定操作方式对文本进行加密或解密,还可以指定密钥的长度。这里 AES 加解密指定的是 ECB 模式,kCCOptionPKCS7Padding
填充方式。
当然,实际上 iOS 只支持 kCCOptionPKCS7Padding
一种填充方式,或者不填充,并且 CCCrypt(...)
函数默认的是 CBC 模式。
+ (NSData *)crypt:(NSData *)data operation:(CCOperation)operation passowrd:(NSString *)password keySize:(NSInteger)keySize{ NSInteger keylength = password.length+1; char *key = malloc(keylength); bzero(key, keylength); [password getCString:key maxLength:keylength encoding:NSUTF8StringEncoding]; NSUInteger dataLength = [data length]; size_t bufferSize = dataLength + keySize; void *buffer = malloc(bufferSize); bzero(buffer, bufferSize); CCCryptorStatus status = CCCrypt(operation, kCCAlgorithmAES, kCCOptionPKCS7Padding | kCCOptionECBMode, key, keySize, NULL, [data bytes], dataLength, buffer, bufferSize, &bufferSize); NSData *result; if (status == kCCSuccess){ result = [NSData dataWithBytes:buffer length:bufferSize]; } if (buffer) free(buffer); if (key) free(key); return result;}
函数 CCCrypt(...)
进行了一次加解密操作,实际上进行了一系列操作,这些操作可以通过 CCCrytorCreate()
、CCCryptorUpdate()
、CCCryptorFinal()
和 CCCryptorRelease()
函数分别进行。
另外,如果需要使用除 CBC 和 ECB 外的加解密模式,可以使用 CCCryptorCreateWithMode()
函数获取一个 CCCryptorRef
变量,而后再进行加解密操作。
PKCS7Padding:对于 AES 而言,加密时需要先将明文分割为 128 位的明文块,所以需要对明文进行填充使其能够整除 16 字节,
而填充的值就是真实填充的字节个数,如果明文字节长度刚好是 16 的整数倍,那么则需要填充 16 个值为 0x10 的字节。
转载地址:http://cvdws.baihongyu.com/