AES Encrypt and Decrypt iOS Security swift

Krishna kushwaha
2 min readApr 1, 2022

we encrypt a string to base64encoded string and vice versa

Step1: Encrypt a string “RCSPAPP”

Step2: Encrypt a string “ka6/GbOZd3ruPoN834wFvw==”

Step3: Dencrypt a string “ka6/GbOZd3ruPoN834wFvw==”

Final Step: its come a string “RCSPAPP”

Let’s Start

here two Objective files .h and .m

or Find code NSData+AES.h

#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

@interface NSData (AES)

- (NSData *)AES128EncryptedDataWithKey:(NSData *)key;
- (NSData *)AES128DecryptedDataWithKey:(NSData *)key;
- (NSData *)AES128EncryptedDataWithKey:(NSData *)key iv:(NSData *)iv;
- (NSData *)AES128DecryptedDataWithKey:(NSData *)key iv:(NSData *)iv;

@end

NS_ASSUME_NONNULL_END

NSData+AES.m

#import "NSData+AES.h"
#import <CommonCrypto/CommonCryptor.h>

@implementation NSData (AES)

- (NSData *)AES128EncryptedDataWithKey:(NSData *)key
{
return [self AES128EncryptedDataWithKey:key iv:nil];
}

- (NSData *)AES128DecryptedDataWithKey:(NSData *)key
{
return [self AES128DecryptedDataWithKey:key iv:nil];
}

- (NSData *)AES128EncryptedDataWithKey:(NSData *)key iv:(NSData *)iv
{
return [self AES128Operation:kCCEncrypt key:key iv:iv];
}

- (NSData *)AES128DecryptedDataWithKey:(NSData *)key iv:(NSData *)iv
{
return [self AES128Operation:kCCDecrypt key:key iv:iv];
}

- (NSData *)AES128Operation:(CCOperation)operation key:(NSData *)key iv:(NSData *)iv
{

NSUInteger dataLength = [self length];
size_t bufferSize = dataLength + kCCBlockSizeAES128;
void *buffer = malloc(bufferSize);

size_t numBytesEncrypted = 0;
CCCryptorStatus cryptStatus = CCCrypt(operation,
kCCAlgorithmAES128,
kCCOptionPKCS7Padding | kCCOptionECBMode,
key.bytes,
kCCBlockSizeAES128,
iv.bytes,
[self bytes],
dataLength,
buffer,
bufferSize,
&numBytesEncrypted);
if (cryptStatus == kCCSuccess) {
return [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted];
}
free(buffer);
return nil;
}

@end

import these two files then created automatically bridge with ProjectName-Bridging-Header and then mention it #import “NSData+AES.h”

Setup Almost done,

Hopefully your are give exact bridge header path in target Build Setting — swift compiler

lets come to our view controller

these two functions need to add in view controller

func encryption(stringToEncrypt: String) -> String{
let key = "MySecretPKey"
let data = stringToEncrypt.data(using: .utf8)
let keyD = key.data(using: .utf8)
let encr = (data as NSData?)!.aes128EncryptedData(withKey: keyD)
let base64String: String = (encr as NSData?)!.base64EncodedString(options: NSData.Base64EncodingOptions(rawValue: 0))
print(base64String)
return base64String
}

func decryption(encryptedString:String) -> String{
let key = "MySecretPKey"
let keyD = key.data(using: .utf8)
let decrpStr = NSData(base64Encoded: encryptedString, options: NSData.Base64DecodingOptions(rawValue: 0))
let dec = (decrpStr)!.aes128DecryptedData(withKey: keyD)
let backToString = String(data: dec!, encoding: String.Encoding.utf8)
print(backToString!)
return backToString!
}

Note: you can changes key and string value accordingly you

Final steps is use this function to encrypt and decrypt string so i’m going to print in ViewDidLoad or you can use wherever you want

let enc = encryption(stringToEncrypt: "RCSPAPP")
let decryptedString = decryption(encryptedString: enc)
print(decryptedString)

and strings comes this ka6/GbOZd3ruPoN834wFvw==

Thank you

Thank you!
Connect on Linkedin

--

--