ios 16进制加密 AES 128 ECB PKCS7Padding
来源:互联网 发布:盘锦大数据 编辑:程序博客网 时间:2024/06/05 23:44
1.使用
NSString *originalStr=@"AES"; //加密 NSString *encryStr = [AES128Util AES128Encrypt:originalStr key:AES_KEY]; //解密 NSString *decryStr = [AES128Util AES128Decrypt:encryStr key:AES_KEY]; NSLog(@"\n加密前:%@\n加密后:%@ \n解密后:%@",originalStr,encryStr,decryStr);
2.具体实现类 .h文件
#import <Foundation/Foundation.h> @interface AES128Util : NSObject +(NSString *)AES128Encrypt:(NSString *)plainText key:(NSString *)key; +(NSString *)AES128Decrypt:(NSString *)encryptText key:(NSString *)key; @end
.m 文件
#import "AES128Util.h" #import <CommonCrypto/CommonCryptor.h> #import "GTMBase64.h" @implementation AES128Util +(NSString *)AES128Encrypt:(NSString *)plainText key:(NSString *)key { char keyPtr[kCCKeySizeAES128+1]; memset(keyPtr, 0, sizeof(keyPtr)); [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding]; NSData* data = [plainText dataUsingEncoding:NSUTF8StringEncoding]; NSUInteger dataLength = [data length]; size_t bufferSize = dataLength + kCCBlockSizeAES128; voidvoid *buffer = malloc(bufferSize); size_t numBytesEncrypted = 0; CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding|kCCOptionECBMode, keyPtr, kCCBlockSizeAES128, NULL, [data bytes], dataLength, buffer, bufferSize, &numBytesEncrypted); if (cryptStatus == kCCSuccess) { NSData *resultData = [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted]; //return [GTMBase64 stringByEncodingData:resultData]; return [self hexStringFromData:resultData]; } free(buffer); return nil; } +(NSString *)AES128Decrypt:(NSString *)encryptText key:(NSString *)key { char keyPtr[kCCKeySizeAES128 + 1]; memset(keyPtr, 0, sizeof(keyPtr)); [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding]; //NSData *data = [GTMBase64 decodeData:[encryptText dataUsingEncoding:NSUTF8StringEncoding]]; NSData *data=[self dataForHexString:encryptText]; NSUInteger dataLength = [data length]; size_t bufferSize = dataLength + kCCBlockSizeAES128; voidvoid *buffer = malloc(bufferSize); size_t numBytesCrypted = 0; CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding|kCCOptionECBMode, keyPtr, kCCBlockSizeAES128, NULL, [data bytes], dataLength, buffer, bufferSize, &numBytesCrypted); if (cryptStatus == kCCSuccess) { NSData *resultData = [NSData dataWithBytesNoCopy:buffer length:numBytesCrypted]; return [[[NSString alloc] initWithData:resultData encoding:NSUTF8StringEncoding] autorelease]; } free(buffer); return nil; } // 普通字符串转换为十六进 + (NSString *)hexStringFromData:(NSData *)data { Byte *bytes = (Byte *)[data bytes]; // 下面是Byte 转换为16进制。 NSString *hexStr = @""; for(int i=0; i<[data length]; i++) { NSString *newHexStr = [NSString stringWithFormat:@"%x",bytes[i] & 0xff]; //16进制数 newHexStr = [newHexStr uppercaseString]; if([newHexStr length] == 1) { newHexStr = [NSString stringWithFormat:@"0%@",newHexStr]; } hexStr = [hexStr stringByAppendingString:newHexStr]; } return hexStr; } //参考:http://blog.csdn.net/linux_zkf/article/details/17124577 //十六进制转Data + (NSData*)dataForHexString:(NSString*)hexString { if (hexString == nil) { return nil; } const char* ch = [[hexString lowercaseString] cStringUsingEncoding:NSUTF8StringEncoding]; NSMutableData* data = [NSMutableData data]; while (*ch) { if (*ch == ' ') { continue; } char byte = 0; if ('0' <= *ch && *ch <= '9') { byte = *ch - '0'; }else if ('a' <= *ch && *ch <= 'f') { byte = *ch - 'a' + 10; }else if ('A' <= *ch && *ch <= 'F') { byte = *ch - 'A' + 10; } ch++; byte = byte << 4; if (*ch) { if ('0' <= *ch && *ch <= '9') { byte += *ch - '0'; } else if ('a' <= *ch && *ch <= 'f') { byte += *ch - 'a' + 10; }else if('A' <= *ch && *ch <= 'F'){ byte += *ch - 'A' + 10; } ch++; } [data appendBytes:&byte length:1]; } return data; }
1 0
- IOS AES 128 ECB PKCS7Padding 16进制加密解密
- IOS AES 128 ECB PKCS7Padding 16进制加密解密
- ios 16进制加密 AES 128 ECB PKCS7Padding
- iOS—AES加密(128 CBC/ECB NoPadding/PKCS7Padding)
- IOS 使用AES/ECB/PKCS7Padding 加密、解密数据
- AES/ECB/PKCS5Padding/PKCS7Padding 128位密钥(带密钥补位功能)加密解密
- AES-128 ECB 加密有感
- iOS CommonCrypto 对称加密 AES ecb,cbc
- JAVA AES-128-ECB加密为16进制
- 用Java进行AES256-ECB-PKCS7Padding加密
- 用Java进行AES256-ECB-PKCS7Padding加密
- 加密算法AES256的ECB-PKCS7Padding加密
- java使用AES加密解密 AES-128-ECB加密
- AES(ECB)加密
- android加密,php解密 , AES,CBC, PKCS7Padding
- AES Java加密 C#解密 (128-ECB加密模式)
- AES/ECB/PKCS5Padding 加密类
- AES-ECB-128加密算法
- spring httpservletrequest request接收数据
- 公认的提供toString()的方法
- Java.RMI远程方法调用
- BGP修改NEXT_HOP下一跳属性值的几种方法
- ActiveMQ 即时通讯服务原理解析和深入分析
- ios 16进制加密 AES 128 ECB PKCS7Padding
- UE4 委托应用
- 阿里巴巴编程规范-java,MySQL,工程
- 京东接口开发
- Oracle spatial与arcsde 的关系
- java面向对象程序设计之深入封装
- adb 显示手机分辨率
- springboot shiro 整合
- USACO 3.1解题思路报告