AES Encrypt and Decrypt iOS Security swift
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
#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