Objective-C Base64 encode and decode with validation
Objective-C
#import <Foundation/Foundation.h>
static NSString *Base64Encode(NSString *text) {
NSData *data = [text dataUsingEncoding:NSUTF8StringEncoding];
return [data base64EncodedStringWithOptions:0];
}
static NSString *Base64Decode(NSString *encoded, NSError **error) {
if (encoded.length % 4 != 0) {
if (error) *error = [NSError errorWithDomain:@"Base64" code:1 userInfo:@{NSLocalizedDescriptionKey: @"length must be a multiple of 4"}];
return nil;
}
NSData *data = [[NSData alloc] initWithBase64EncodedString:encoded options:0];
if (!data) {
if (error) *error = [NSError errorWithDomain:@"Base64" code:2 userInfo:@{NSLocalizedDescriptionKey: @"invalid base64 characters"}];
return nil;
}
NSString *text = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
if (!text && error) *error = [NSError errorWithDomain:@"Base64" code:3 userInfo:@{NSLocalizedDescriptionKey: @"payload is not valid UTF-8"}];
return text;
}