├── NSData+AES128.h ├── README.md ├── NSString+AES128.h ├── NSString+AES128.m └── NSData+AES128.m /NSData+AES128.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSData+AES128.h 3 | // ceshi 4 | // 5 | // Created by hushuangfei on 16/7/23. 6 | // Copyright © 2016年 胡双飞. All rights reserved. 7 | // AES128/CBC/PKCS5Padding 8 | 9 | #import 10 | #import 11 | @interface NSData (AES128) 12 | /** 13 | * 加密 14 | * 15 | * @param key 公钥 16 | * @param iv 偏移量 17 | * 18 | * @return 加密之后的NSData 19 | */ 20 | - (NSData *)AES128EncryptWithKey:(NSString *)key iv:(NSString *)iv; 21 | /** 22 | * 解密 23 | * 24 | * @param key 公钥 25 | * @param iv 偏移量 26 | * 27 | * @return 解密之后的NSData 28 | */ 29 | - (NSData *)AES128DecryptWithKey:(NSString *)key iv:(NSString *)iv; 30 | 31 | @end 32 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # AES128CBC_PKCS5Padding 2 | AES128CBC_PKCS5Padding 加密方式 3 | 4 | 1.使用方式: 5 | #import "NSString+AES128.h" 6 | 7 | key 和 iv 必须为16位。 8 | key : 公钥 iv : 偏移量 iv要和服务器加密时,商量好。 9 | 10 | 加密: 11 | 12 | NSString *aesPassword2 = [NSString AES128CBC_PKCS5Padding_EncryptStrig:@"需要加密的内容" 13 | key:@"公钥(16位)" 14 | iv:@"偏移量(16位)"]; 15 | 16 | NSString *aesPassword = [NSString AES128CBC_PKCS5Padding_EncryptStrig:@"需要加密的内容" 17 | keyAndIv:@"key和iv可以使用同一的16位"]; 18 | 19 | 解密: 20 | 21 | NSString *aesDncrypt2 = [NSString AES128CBC_PKCS5Padding_DecryptString:@"加密的字符串" 22 | key:@"公钥" 23 | iv:@"偏移量"]; 24 | 25 | NSString *aesDncrypt = [NSString AES128CBC_PKCS5Padding_DecryptString:@"加密的字符串" 26 | keyAndIv:@"key与iv一样时"]; 27 | -------------------------------------------------------------------------------- /NSString+AES128.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSString+AES128.h 3 | // ceshi 4 | // 5 | // Created by hushuangfei on 16/7/23. 6 | // Copyright © 2016年 胡双飞. All rights reserved. 7 | // AES/CBC/PKCS5Padding 8 | 9 | #import 10 | #import 11 | @interface NSString (AES128) 12 | 13 | /** 14 | * 加密 15 | * 16 | * @param string 需要加密的String 17 | * @param keyAndIv key和iv都用同一的16位 (服务器商量,必须是16位 例如"1234567812345678") 18 | * key是公钥,iv是偏移量 19 | * @return 加密后的字符串 20 | */ 21 | + (NSString *)AES128CBC_PKCS5Padding_EncryptStrig:(NSString *)string keyAndIv:(NSString *)keyAndIv; 22 | /** 23 | * 加密 24 | * 25 | * @param string 需要加密的string 26 | * @param key 公钥 27 | * @param iv 偏移量 28 | * 29 | * @return 加密后的字符串 30 | */ 31 | + (NSString *)AES128CBC_PKCS5Padding_EncryptStrig:(NSString *)string key:(NSString*)key iv:(NSString *)iv; 32 | /** 33 | * 解密 34 | * 35 | * @param string 加密的string 36 | * @param keyAndIv key和iv 37 | * 38 | * @return 解密后的内容 39 | */ 40 | + (NSString *)AES128CBC_PKCS5Padding_DecryptString:(NSString *)string keyAndIv:(NSString *)keyAndIv; 41 | /** 42 | * 解密 43 | * 44 | * @param string 加密的字符串 45 | * @param key 钥匙(公钥) 46 | * @param iv 偏移量 47 | * 48 | * @return 解密后的内容 49 | */ 50 | + (NSString *)AES128CBC_PKCS5Padding_DecryptString:(NSString *)string key:(NSString *)key iv:(NSString *)iv; 51 | @end 52 | -------------------------------------------------------------------------------- /NSString+AES128.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSString+AES128.m 3 | // ceshi 4 | // 5 | // Created by hushuangfei on 16/7/23. 6 | // Copyright © 2016年 胡双飞. All rights reserved. 7 | // 8 | 9 | #import "NSString+AES128.h" 10 | #import "NSData+AES128.h" 11 | @implementation NSString (AES128) 12 | 13 | //加密 14 | + (NSString *)AES128CBC_PKCS5Padding_EncryptStrig:(NSString *)string keyAndIv:(NSString *)keyAndIv{ 15 | 16 | NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding]; 17 | NSData *encryptData = [data AES128EncryptWithKey:keyAndIv iv:keyAndIv]; 18 | NSString *encryptring = [encryptData base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength]; 19 | return encryptring; 20 | 21 | } 22 | //加密 23 | + (NSString *)AES128CBC_PKCS5Padding_EncryptStrig:(NSString *)string key:(NSString*)key iv:(NSString *)iv{ 24 | NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding]; 25 | NSData *encryptData = [data AES128EncryptWithKey:key iv:iv]; 26 | NSString *encryptring = [encryptData base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength]; 27 | return encryptring; 28 | 29 | } 30 | //解密 31 | + (NSString *)AES128CBC_PKCS5Padding_DecryptString:(NSString *)string keyAndIv:(NSString *)keyAndIv{ 32 | 33 | NSData *decryptBase64data = [[NSData alloc]initWithBase64EncodedString:string options:NSDataBase64DecodingIgnoreUnknownCharacters]; 34 | NSData *decryptData = [decryptBase64data AES128DecryptWithKey:keyAndIv iv:keyAndIv]; 35 | NSString *decryptString = [[NSString alloc]initWithData:decryptData encoding:NSUTF8StringEncoding]; 36 | return decryptString; 37 | 38 | } 39 | //解密 40 | + (NSString *)AES128CBC_PKCS5Padding_DecryptString:(NSString *)string key:(NSString *)key iv:(NSString *)iv{ 41 | 42 | NSData *decryptBase64data = [[NSData alloc]initWithBase64EncodedString:string options:NSDataBase64DecodingIgnoreUnknownCharacters]; 43 | NSData *decryptData = [decryptBase64data AES128DecryptWithKey:key iv:iv]; 44 | NSString *decryptString = [[NSString alloc]initWithData:decryptData encoding:NSUTF8StringEncoding]; 45 | return decryptString; 46 | 47 | } 48 | 49 | @end 50 | -------------------------------------------------------------------------------- /NSData+AES128.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSData+AES128.m 3 | // ceshi 4 | // 5 | // Created by hushuangfei on 16/7/23. 6 | // Copyright © 2016年 胡双飞. All rights reserved. 7 | // 8 | 9 | #import "NSData+AES128.h" 10 | 11 | @implementation NSData (AES128) 12 | /** 13 | * 根据CCOperation,确定加密还是解密 14 | * 15 | * @param operation kCCEncrypt -> 加密 kCCDecrypt->解密 16 | * @param key 公钥 17 | * @param iv 偏移量 18 | * 19 | * @return 加密或者解密的NSData 20 | */ 21 | - (NSData *)AES128Operation:(CCOperation)operation key:(NSString *)key iv:(NSString *)iv 22 | 23 | { 24 | 25 | char keyPtr[kCCKeySizeAES128 + 1]; 26 | 27 | memset(keyPtr, 0, sizeof(keyPtr)); 28 | 29 | [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding]; 30 | 31 | 32 | 33 | char ivPtr[kCCBlockSizeAES128 + 1]; 34 | 35 | memset(ivPtr, 0, sizeof(ivPtr)); 36 | 37 | [iv getCString:ivPtr maxLength:sizeof(ivPtr) encoding:NSUTF8StringEncoding]; 38 | 39 | 40 | 41 | NSUInteger dataLength = [self length]; 42 | 43 | size_t bufferSize = dataLength + kCCBlockSizeAES128; 44 | 45 | void *buffer = malloc(bufferSize); 46 | 47 | 48 | 49 | size_t numBytesCrypted = 0; 50 | 51 | CCCryptorStatus cryptStatus = CCCrypt(operation, 52 | 53 | kCCAlgorithmAES128, 54 | 55 | kCCOptionPKCS7Padding, 56 | 57 | keyPtr, 58 | 59 | kCCBlockSizeAES128, 60 | 61 | ivPtr, 62 | 63 | [self bytes], 64 | 65 | dataLength, 66 | 67 | buffer, 68 | 69 | bufferSize, 70 | 71 | &numBytesCrypted); 72 | 73 | if (cryptStatus == kCCSuccess) { 74 | 75 | return [NSData dataWithBytesNoCopy:buffer length:numBytesCrypted]; 76 | 77 | } 78 | 79 | free(buffer); 80 | 81 | return nil; 82 | 83 | } 84 | 85 | 86 | - (NSData *)AES128EncryptWithKey:(NSString *)key iv:(NSString *)iv 87 | 88 | { 89 | 90 | return [self AES128Operation:kCCEncrypt key:key iv:iv]; 91 | 92 | } 93 | 94 | 95 | - (NSData *)AES128DecryptWithKey:(NSString *)key iv:(NSString *)iv 96 | 97 | { 98 | 99 | return [self AES128Operation:kCCDecrypt key:key iv:iv]; 100 | 101 | } 102 | 103 | @end 104 | --------------------------------------------------------------------------------