iOS AES128加解密
来源:互联网 发布:欧陆风云4 steam Mac 编辑:程序博客网 时间:2024/05/16 14:57
最近有个项目用过AES128 的加解密,搜了不少资料,最后封装了一个公共方法,分享一下。代码如下
一:.h文件
#import <Foundation/Foundation.h>@interface FSAES128 : NSObject/** * 加密 * * @param string 需要加密的string * * @return 加密后的字符串 */+ (NSString *)AES128EncryptStrig:(NSString *)string;/** * 解密 * * @param string 加密的字符串 * * @return 解密后的内容 */+ (NSString *)AES128DecryptString:(NSString *)string;@end
二:.m文件
#import "FSAES128.h"#import "NSData+AES128.h"#define IV @"偏移量 16位长度的字符串"#define KEY @"key值 16位长度的字符串"@implementation FSAES128/** * 加密 * * @param string 需要加密的string * * @return 加密后的字符串 */+ (NSString *)AES128EncryptStrig:(NSString *)string{ NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding]; NSData *aesData = [data AES128EncryptWithKey:KEY iv:IV]; return [FSAES128 convertDataToHexStr:aesData];}/** * 解密 * * @param string 加密的字符串 * * @return 解密后的内容 */+ (NSString *)AES128DecryptString:(NSString *)string{ NSData *data = [FSAES128 convertHexStrToData:string]; NSData *aesData = [data AES128DecryptWithKey:KEY iv:IV]; return [[NSString alloc] initWithData:aesData encoding:NSUTF8StringEncoding];}//16进制转换为NSData+ (NSData*)convertHexStrToData:(NSString*)str { if (!str || [str length] ==0) { return nil; } NSMutableData *hexData = [[NSMutableData alloc]initWithCapacity:[str length]*2]; NSRange range; if ([str length] %2==0) { range = NSMakeRange(0,2); } else { range = NSMakeRange(0,1); } for (NSInteger i = range.location; i < [str length]; i +=2) { unsigned int anInt; NSString *hexCharStr = [str substringWithRange:range]; NSScanner *scanner = [[NSScanner alloc]initWithString:hexCharStr]; [scanner scanHexInt:&anInt]; NSData *entity = [[NSData alloc]initWithBytes:&anInt length:1]; [hexData appendData:entity]; range.location+= range.length; range.length=2; }// NSLog(@"hexdata: %@", hexData); return hexData;}//NSData转换为16进制+ (NSString*)convertDataToHexStr:(NSData*)data { if (!data || [data length] ==0) { return @""; } NSMutableString *string = [[NSMutableString alloc]initWithCapacity:[data length]/2]; [data enumerateByteRangesUsingBlock:^(const void*bytes,NSRange byteRange,BOOL*stop) { unsigned char *dataBytes = (unsigned char*)bytes; for (NSInteger i =0; i < byteRange.length; i++) { NSString *hexStr = [NSString stringWithFormat:@"%x", (dataBytes[i]) & 0xff]; if ([hexStr length] ==2) { [string appendString:hexStr]; } else { [string appendFormat:@"0%@", hexStr]; } } }]; return string;}@end
三:NSData+AES128文件
#import <Foundation/Foundation.h>#import <CommonCrypto/CommonCryptor.h>@interface NSData (AES128)/** * 加密 * * @param key 公钥 * @param iv 偏移量 * * @return 加密之后的NSData */- (NSData *)AES128EncryptWithKey:(NSString *)key iv:(NSString *)iv;/** * 解密 * * @param key 公钥 * @param iv 偏移量 * * @return 解密之后的NSData */- (NSData *)AES128DecryptWithKey:(NSString *)key iv:(NSString *)iv;@end
#import "NSData+AES128.h"@implementation NSData (AES128)/** * 根据CCOperation,确定加密还是解密 * * @param operation kCCEncrypt -> 加密 kCCDecrypt->解密 * @param key 公钥 * @param iv 偏移量 * * @return 加密或者解密的NSData */- (NSData *)AES128Operation:(CCOperation)operation key:(NSString *)key iv:(NSString *)iv{ char keyPtr[kCCKeySizeAES128 + 1]; memset(keyPtr, 0, sizeof(keyPtr)); [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding]; char ivPtr[kCCBlockSizeAES128 + 1]; memset(ivPtr, 0, sizeof(ivPtr)); [iv getCString:ivPtr maxLength:sizeof(ivPtr) encoding:NSUTF8StringEncoding]; NSUInteger dataLength = [self length]; size_t bufferSize = dataLength + kCCBlockSizeAES128; void *buffer = malloc(bufferSize); size_t numBytesCrypted = 0; CCCryptorStatus cryptStatus = CCCrypt(operation, kCCAlgorithmAES128, kCCOptionPKCS7Padding, keyPtr, kCCBlockSizeAES128, ivPtr, [self bytes], dataLength, buffer, bufferSize, &numBytesCrypted); if (cryptStatus == kCCSuccess) { return [NSData dataWithBytesNoCopy:buffer length:numBytesCrypted]; } free(buffer); return nil;}- (NSData *)AES128EncryptWithKey:(NSString *)key iv:(NSString *)iv{ return [self AES128Operation:kCCEncrypt key:key iv:iv];}- (NSData *)AES128DecryptWithKey:(NSString *)key iv:(NSString *)iv{ return [self AES128Operation:kCCDecrypt key:key iv:iv];}@end
四:使用方法
//加密的字段NSString *str = @"75677F53D5688E1FE9AC073E324B76BC6CCD8CCC05509FBF74375B40BDE50DA0B6A153355D82567B1E2FAAC96600C61064E9820AEA58E72C1DA3D3108F6DABE81E1766200F7183B0AB1F093B368F03321CB0D14EDDD57E3E64C2549FEC04C25187F8008AB90E4B7D0B69256A0467A923C56F004F721207C3A69E30D3470C08601523D79BE3F4907FC69A7CB02C747782ABC4A7F6D52CACB72DAE92984FFD73CA";//解密字符串NSString *contentStr = [FSAES128 AES128DecryptString:str];contentStr 解密值:{ "freezeMoney": 0, "ordersMoney": null, "roleCode": 2, "status": 0, "totalMoney": 500, "userCode": "116092100000006", "userName": "13691116842", "walletId": "1"}
0 0
- iOS AES128加解密
- AES128-ecb加解密
- ios AES128加密解密算法
- iOS 调用 SecKeyWrapper 进行 AES128 加密解密
- iOS AES128 CBC No Padding加密解密
- IOS中json字符串原生数据请求&IOS跨平台AES128字符串加解密&AFNetworking框架的简单封装使用
- aes128 cbc加解密脚本示例、运行结果。
- AES128加解密(SBOX+Rijndael)两种方法
- 提供一个AES128位/CBC模式加解密工具类
- iOS AES128 CBC No Padding加密解密 (转载)
- JAVA AES128加密解密
- AES128加密解密方法
- iOS-AES加解密
- ios加解密
- ios RSA加解密
- iOS RSA加解密
- iOS使用DES加解密
- iOS使用DES加解密
- iOS调用拨打电话
- 快速调试你的Python程序
- 520. Detect Capital
- 中国游客到哪里,移动支付去哪里
- Ubuntu上卸载 anaconda
- iOS AES128加解密
- 第四次作业
- iOS AFNETWorkIng的封装类
- 常见的异步实现方法以及ES7中如何通过async实现异步操作
- C++第4次作业
- java并发包:几个多线程控制工具类
- Django项目开发举例之用户界面视图模版(5)
- DAU 统计,日活跃用户数 (DAU) 是衡量一个产品表现的重要指标。 需要编写程序,根据给定的某一天的 N 条访问记录,对当天的用户总数 M 进行统计。
- 直接插入排序学习