1 #import <Foundation/Foundation.h> 2 3 #import <CommonCrypto/CommonDigest.h> 4 5 #import <CommonCrypto/CommonCryptor.h> 6 7 #import "NSData+AES.h" 8 9 @interface NSString (AES) 10 11 //加密字符串 12 13 - (NSString*)aes128Encrypt:(NSString *)aKey; 14 15 //解密字符串 16 17 - (NSString*)aes128Decrypt:(NSString *)aKey; 18 19 @end
1 #define gIv @"0102030405060708" //自行修改16位 -->偏移量 2 3 @implementation NSString (AES256) 4 5 - (NSString *)aes128Encrypt:(NSString *)aKey 6 7 { 8 9 char keyPtr[kCCKeySizeAES128+1]; 10 11 memset(keyPtr, 0, sizeof(keyPtr)); 12 13 [aKey getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding]; 14 15 16 17 char ivPtr[kCCBlockSizeAES128+1]; 18 19 memset(ivPtr, 0, sizeof(ivPtr)); 20 21 [gIv getCString:ivPtr maxLength:sizeof(ivPtr) encoding:NSUTF8StringEncoding]; 22 23 24 25 NSData* data = [self dataUsingEncoding:NSUTF8StringEncoding]; 26 27 NSUInteger dataLength = [data length]; 28 29 30 31 int diff = kCCKeySizeAES128 - (dataLength % kCCKeySizeAES128); 32 33 int newSize = 0; 34 35 36 37 if(diff > 0) 38 39 { 40 41 newSize = dataLength + diff; 42 43 } 44 45 46 47 char dataPtr[newSize]; 48 49 memcpy(dataPtr, [data bytes], [data length]); 50 51 for(int i = 0; i < diff; i++) 52 53 { 54 55 dataPtr[i + dataLength] = 0x00; 56 57 } 58 59 60 61 size_t bufferSize = newSize + kCCBlockSizeAES128; 62 63 void *buffer = malloc(bufferSize); 64 65 memset(buffer, 0, bufferSize); 66 67 68 69 size_t numBytesCrypted = 0; 70 71 72 73 CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, 74 75 kCCAlgorithmAES128, 76 77 kCCOptionPKCS7Padding, // 补码方式 78 79 keyPtr, 80 81 kCCKeySizeAES128, 82 83 ivPtr, 84 85 dataPtr, 86 87 sizeof(dataPtr), 88 89 buffer, 90 91 bufferSize, 92 93 &numBytesCrypted); 94 95 96 97 if (cryptStatus == kCCSuccess) { 98 99 NSData *result = [NSData dataWithBytesNoCopy:buffer length:numBytesCrypted]; 100 101 if (result && result.length > 0) { 102 103 104 105 Byte *datas = (Byte*)[result bytes]; 106 107 NSMutableString *output = [NSMutableString stringWithCapacity:result.length * 2]; 108 109 for(int i = 0; i < result.length; i++){ 110 111 [output appendFormat:@"%02x", datas[i]]; 112 113 } 114 115 return output; 116 117 } 118 119 } 120 121 free(buffer); 122 123 return nil; 124 125 } 126 127 128 129 - (NSString *)aes128Decrypt:(NSString *)aKey 130 131 { 132 133 char keyPtr[kCCKeySizeAES128 + 1]; 134 135 memset(keyPtr, 0, sizeof(keyPtr)); 136 137 [aKey getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding]; 138 139 140 141 char ivPtr[kCCBlockSizeAES128 + 1]; 142 143 memset(ivPtr, 0, sizeof(ivPtr)); 144 145 [gIv getCString:ivPtr maxLength:sizeof(ivPtr) encoding:NSUTF8StringEncoding]; 146 147 148 149 NSMutableData *data = [NSMutableData dataWithCapacity:self.length / 2]; 150 151 unsigned char whole_byte; 152 153 char byte_chars[3] = {'