Objective-C
Objective-C
Decrypt 256-bit AES GCM Produced by Something Unknown
See more Encryption Examples
Demonstrates how to decrypt something produced elsewhere (unknown) with 256-bit AES GCM.Chilkat Objective-C Downloads
#import <NSString.h>
#import <CkoCrypt2.h>
#import <CkoBinData.h>
BOOL success = NO;
// This example assumes the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
// We have the following to decrypt:
// Key (Base64):
NSString *keyBase64 = @"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
// IV (Base64Url):
NSString *ivBase64Url = @"xrvaINMLqotAbWRK";
// ciphertext (base64url):
NSString *cipherBase64Url = @"RtGNAS-zQOxSB8W0HfqJjCoyt9KgImW_l-HjVC40hOOl-RNfRF3hzDIT1kvFVF8i_KX9XmqAftb6lyq-jLCEc_MSgqt3q1ixv3Ez4SbS3G5e3qGzLwxIMi2sCt00aDNwK2ipsJ4aw8s7ePPnl4oY-y1st9rwCWR0rrgEZwS9jmS4uJWGPn9K3jbKRnMslznDbtFLNJctMVXBTP-cv47JelxLCBOQSlK29rMuEFrhHR_VQrPq6gtZaBVSXZSYT0XOklp7nu9mVhrMCRtBCC5oiu5MPE5JYx4ANo3hUY7_NyQl2bpn9GfRXrdvqRGE-gy2upj-cDkm0t_tV8xmYge9DBQTH3B_4BGl2qTk_o-m7pEmKkS8XSdQhGcuFlykqrkE8SzB5I8esfzWOM0pwxbz0H_VaylKYHY=";
CkoCrypt2 *crypt = [[CkoCrypt2 alloc] init];
crypt.CryptAlgorithm = @"aes";
crypt.CipherMode = @"gcm";
crypt.KeyLength = [NSNumber numberWithInt:256];
success = [crypt SetEncodedAad: @"random" encoding: @"ascii"];
[crypt SetEncodedKey: keyBase64 encoding: @"base64"];
[crypt SetEncodedIV: ivBase64Url encoding: @"base64url"];
// The cipher text contains the 16-byte auth tag at the end.
// get it separately..
CkoBinData *bdEncrypted = [[CkoBinData alloc] init];
CkoBinData *bdAuthTag = [[CkoBinData alloc] init];
success = [bdEncrypted AppendEncoded: cipherBase64Url encoding: @"base64url"];
int numBytes = [bdEncrypted.NumBytes intValue];
NSString *authTagHex = [bdEncrypted GetEncodedChunk: [NSNumber numberWithInt: (numBytes - 16)] numBytes: [NSNumber numberWithInt: 16] encoding: @"hex"];
NSLog(@"%@%@",@"Auth tag in hex: ",authTagHex);
success = [bdAuthTag AppendEncoded: authTagHex encoding: @"hex"];
[bdEncrypted RemoveChunk: [NSNumber numberWithInt: (numBytes - 16)] numBytes: [NSNumber numberWithInt: 16]];
// Use this special value to tell Chilkat to ignore the auth tag.
success = [crypt SetEncodedAuthTag: @"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" encoding: @"hex"];
// Decrypt
crypt.EncodingMode = @"base64";
NSString *originalText = [crypt DecryptStringENC: [bdEncrypted GetEncoded: @"base64"]];
if (crypt.LastMethodSuccess == NO) {
NSLog(@"%@",crypt.LastErrorText);
}
else {
NSLog(@"%@",originalText);
NSLog(@"%@",@"Success.");
}
// Decrypted text