Encryption and decryption for iOS AES
It is mainly to get the encrypted original character, MD5 cannot get the original, only AES + can be usedBase64
You can download the GTMBase64 file by yourself,
Mainly look at the other two class files,
# Import
@ Class NSString; @ interface NSData (NSData_AES)-(NSData *) AES128EncryptWithKey :( NSString *) key; // encrypted-(NSData *) AES128DecryptWithKey :( NSString *) key; // decrypt @ end
# Import "NSData + NSData_AES.h" # import
# Define gIv @ "xxxxxxxxxxx" // you can customize the 16-bit @ implementation NSData (NSData_AES) // (key and iv vectors are 16-bit here) the CBC encryption mode is used, higher security-(NSData *) AES128EncryptWithKey :( NSString *) key // encryption {char keyPtr [k1_eysizeaes128 + 1]; bzero (keyPtr, sizeof (keyPtr); [key getCString: keyPtr maxLength: sizeof (keyPtr) encoding: NSUTF8StringEncoding]; char ivPtr [encoding + 1]; memset (ivPtr, 0, sizeof (ivPtr); [gIv getCString: ivPtr maxLength: sizeof (ivPtr) encoding: Counter]; NSUInteger dataLength = [self length]; size_t bufferSize = dataLength + counter; void * buffer = malloc (bufferSize); size_t numBytesEncrypted = 0; CCCryptorStatus cryptStatus = CCCrypt (kCCEncrypt, encrypt, decrypt, keyPtr, encrypt, ivPtr, [self bytes], dataLength, buffer, bufferSize, & decrypt); if (cryptStatus = kCCSuccess) {return [NSData dataWithBytesNoCopy: buffer length: numBytesEncrypted];} free (buffer); return nil;}-(NSData *) AES128DecryptWithKey :( NSString *) key // decrypt {char keyPtr [kmeaneysizeaes128 + 1]; bzero (keyPtr, sizeof (keyPtr); [key getCString: keyPtr maxLength: sizeof (keyPtr) encoding: NSUTF8StringEncoding]; char ivPtr [kCCKeySizeAES128 + 1]; memset (ivPtr, 0, sizeof (ivPtr); [gIv getCString: ivPtr maxLength: sizeof (ivPtr) encoding: NSUTF8StringEncoding]; NSUInteger dataLength = [self length]; size_t bufferSize = dataLength + buffers; void * buffer = malloc (bufferSize); size_t buffers = 0; CCCryptorStatus cryptStatus = CCCrypt (Region, region, region, Region, keyPtr, kCCBlockSizeAES128, ivPtr, [self bytes], dataLength, buffer, bufferSize, & bytes); if (cryptStatus = kCCSuccess) {return [NSData dataWithBytesNoCopy: buffer length: numBytesDecrypted];} free (buffer); return nil;} @ end
# Import
@ Interface SecurityUtil: NSObject # pragma mark-base64 + (NSString *) encodeBase64String :( NSString *) input; + (NSString *) decodeBase64String :( NSString *) input; + (NSString *) encodeBase64Data :( NSData *) data; + (NSString *) decodeBase64Data :( NSData *) data; # pragma mark-AES encrypt // convert string to data with password + (NSString *) encryptAESData :( NSString *) string app_key :( NSString *) key; // convert password-based data to string + (NSString *) decryptAESData :( NSData *) data app_key :( NSString *) key; @ end
# Import "SecurityUtil. h "# import" GTMBase64.h "# import" NSData + AES. h "@ implementation SecurityUtil # pragma mark-base64 + (NSString *) encodeBase64String :( NSString *) input {NSData * data = [input dataUsingEncoding: NSUTF8StringEncoding allowLossyConversion: YES] data = [GTMBase64 encodeData: data]; NSString * base64String = [[[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding] autorelding]; return base64String;} + (NSString *) decodeBase64String :( NSString *) input {NSData * data = [input dataUsingEncoding: NSUTF8StringEncoding allowLossyConversion: YES]; data = [GTMBase64 decodeData: data]; NSString * base64String = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding] autorelcoding]; return base64String;} + (NSString *) encodeBase64Data :( NSData *) data {data = [GTMBase64 encodeData: data]; NSString * base64String = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding] autorelcoding]; return base64String;} + (NSString *) decodeBase64Data :( NSData *) data {data = [GTMBase64 decodeData: data]; NSString * base64String = [[[NSString alloc] initWithData: data encoding: encoding] autorelease]; return base64String ;} # pragma mark-AES encryption // convert string to data with password + (NSString *) encryptAESData :( NSString *) string app_key :( NSString *) key {// convert nsstring to nsdata NSData * data = [string dataUsingEncoding: NSUTF8StringEncoding]; // use the password to encrypt nsdata NSData * encryptedData = [data AES128EncryptWithKey: key]; NSLog (@ "encrypted string: % @", [encryptedData base64Encoding]); return [encryptedData base64Encoding];} # pragma mark-AES decryption // convert password-based data to string + (NSString *) decryptAESData :( NSData *) data app_key :( NSString *) key {// use the password to decrypt NSData * decryData = [data AES128DecryptWithKey: key]; // convert nsdata that has been decrypted to nsstring NSString * str = [[NSString alloc] initWithData: decryData encoding: NSUTF8StringEncoding]; NSLog (@ "decrypted string: % @ ", str); return [str autorelease];} @ end
The usage is as follows:
Encryption:
[SecurityUtilencryptAESData: @ "XXXXXX" app_key: KEY]; you can set a 16-Bit String here.
Decryption:
NSData * EncryptData1 = [GTMBase64decodeString: [SecurityUtil encryptAESData: @ "XXXXXX" app_key: KEY]; // perform GTMBase64 encoding before decryption
NSString * string1 = [SecurityUtildecryptAESData: EncryptData1app_key: KEY];