以下是一个使用Objective-C实现AES128加密CBC/NoPadding的示例代码:
#import
NSData *AES128EncryptCBCNoPadding(NSString *key, NSString *iv, NSString *plainText) {
NSData *keyData = [key dataUsingEncoding:NSUTF8StringEncoding];
NSData *ivData = [iv dataUsingEncoding:NSUTF8StringEncoding];
NSData *plainData = [plainText dataUsingEncoding:NSUTF8StringEncoding];
size_t bufferSize = plainData.length + kCCBlockSizeAES128;
void *buffer = malloc(bufferSize);
size_t encryptedSize = 0;
CCCryptorStatus result = CCCrypt(kCCEncrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding,
keyData.bytes, keyData.length,
ivData.bytes,
plainData.bytes, plainData.length,
buffer, bufferSize, &encryptedSize);
if (result == kCCSuccess) {
NSData *encryptedData = [NSData dataWithBytesNoCopy:buffer length:encryptedSize];
return encryptedData;
}
free(buffer);
return nil;
}
NSString *AES128DecryptCBCNoPadding(NSString *key, NSString *iv, NSData *encryptedData) {
NSData *keyData = [key dataUsingEncoding:NSUTF8StringEncoding];
NSData *ivData = [iv dataUsingEncoding:NSUTF8StringEncoding];
size_t bufferSize = encryptedData.length + kCCBlockSizeAES128;
void *buffer = malloc(bufferSize);
size_t decryptedSize = 0;
CCCryptorStatus result = CCCrypt(kCCDecrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding,
keyData.bytes, keyData.length,
ivData.bytes,
encryptedData.bytes, encryptedData.length,
buffer, bufferSize, &decryptedSize);
if (result == kCCSuccess) {
NSData *decryptedData = [NSData dataWithBytesNoCopy:buffer length:decryptedSize];
NSString *decryptedText = [[NSString alloc] initWithData:decryptedData encoding:NSUTF8StringEncoding];
return decryptedText;
}
free(buffer);
return nil;
}
使用示例:
NSString *key = @"0123456789abcdef";
NSString *iv = @"0123456789abcdef";
NSString *plainText = @"Hello, World!";
NSData *encryptedData = AES128EncryptCBCNoPadding(key, iv, plainText);
NSString *encryptedText = [encryptedData base64EncodedStringWithOptions:0];
NSLog(@"Encrypted Text: %@", encryptedText);
NSString *decryptedText = AES128DecryptCBCNoPadding(key, iv, encryptedData);
NSLog(@"Decrypted Text: %@", decryptedText);
请注意,这只是一个简单的示例代码,并不考虑错误处理和安全性。如果要在实际应用中使用加密算法,请确保采取适当的安全措施。