#import <Foundation/Foundation.h>

 #import <CommonCrypto/CommonDigest.h>

 #import <CommonCrypto/CommonCryptor.h>

 #import "NSData+AES.h"

 @interface NSString (AES)

 //加密字符串

 - (NSString*)aes128Encrypt:(NSString *)aKey;

 //解密字符串

 - (NSString*)aes128Decrypt:(NSString *)aKey;

 @end
 #define gIv             @"0102030405060708" //自行修改16位 -->偏移量

 @implementation NSString (AES256)

  - (NSString *)aes128Encrypt:(NSString *)aKey

 {

     char keyPtr[kCCKeySizeAES128+];

     memset(keyPtr, , sizeof(keyPtr));

     [aKey getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];

     char ivPtr[kCCBlockSizeAES128+];

     memset(ivPtr, , sizeof(ivPtr));

     [gIv getCString:ivPtr maxLength:sizeof(ivPtr) encoding:NSUTF8StringEncoding];

     NSData* data = [self dataUsingEncoding:NSUTF8StringEncoding];

     NSUInteger dataLength = [data length];

     int diff = kCCKeySizeAES128 - (dataLength % kCCKeySizeAES128);

     int newSize = ;

     if(diff > )

     {

         newSize = dataLength + diff;

     }

     char dataPtr[newSize];

     memcpy(dataPtr, [data bytes], [data length]);

     for(int i = ; i < diff; i++)

     {

         dataPtr[i + dataLength] = 0x00;

     }

     size_t bufferSize = newSize + kCCBlockSizeAES128;

     void *buffer = malloc(bufferSize);

     memset(buffer, , bufferSize);

     size_t numBytesCrypted = ;

     CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt,

                                           kCCAlgorithmAES128,

                                           kCCOptionPKCS7Padding,  // 补码方式

                                           keyPtr,

                                           kCCKeySizeAES128,

                                           ivPtr,

                                           dataPtr,

                                           sizeof(dataPtr),

                                           buffer,

                                           bufferSize,

                                           &numBytesCrypted);

     if (cryptStatus == kCCSuccess) {

         NSData *result = [NSData dataWithBytesNoCopy:buffer length:numBytesCrypted];

         if (result && result.length > ) {

             Byte *datas = (Byte*)[result bytes];

             NSMutableString *output = [NSMutableString stringWithCapacity:result.length * ];

             for(int i = ; i < result.length; i++){

                 [output appendFormat:@"%02x", datas[i]];

             }

             return output;

         }

     }

     free(buffer);

     return nil;

 }

 - (NSString *)aes128Decrypt:(NSString *)aKey

 {

     char keyPtr[kCCKeySizeAES128 + ];

     memset(keyPtr, , sizeof(keyPtr));

     [aKey getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];

     char ivPtr[kCCBlockSizeAES128 + ];

     memset(ivPtr, , sizeof(ivPtr));

     [gIv getCString:ivPtr maxLength:sizeof(ivPtr) encoding:NSUTF8StringEncoding];

     NSMutableData *data = [NSMutableData dataWithCapacity:self.length / ];

     unsigned char whole_byte;

     char byte_chars[] = {'\0','\0','\0'};

     int i;

     for (i=; i < [self length] / ; i++) {

         byte_chars[] = [self characterAtIndex:i*];

         byte_chars[] = [self characterAtIndex:i*+];

         whole_byte = strtol(byte_chars, NULL, );

         [data appendBytes:&whole_byte length:];

     }

     NSUInteger dataLength = [data length];

     size_t bufferSize = dataLength + kCCBlockSizeAES128;

     void *buffer = malloc(bufferSize);

     size_t numBytesCrypted = ;

     CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt,

                                           kCCAlgorithmAES128,

                                           kCCOptionPKCS7Padding,

                                           keyPtr,

                                           kCCBlockSizeAES128,

                                           ivPtr,

                                           [data bytes],

                                           dataLength,

                                           buffer,

                                           bufferSize,

                                           &numBytesCrypted);

     if (cryptStatus == kCCSuccess) {

         NSData *resultData = [NSData dataWithBytesNoCopy:buffer length:numBytesCrypted];

         return [[NSString alloc] initWithData:resultData encoding:NSUTF8StringEncoding];

     }

     free(buffer);

     return nil;

 }

 @end

iOS Objective c 16进制字符串转为二进制数组

原文:http://lizhuang.iteye.com/blog/2060143

 @implementation NSString (StringToHexData)

 //
// Decodes an NSString containing hex encoded bytes into an NSData object
//
- (NSData *) stringToHexData
{
int len = [self length] / ; // Target length
unsigned char *buf = malloc(len)
unsigned char *whole_byte = buf;
char byte_chars[] = {'\0','\0','\0'}; int i;
for (i=; i < [self length] / ; i++) {
byte_chars[] = [self characterAtIndex:i*];
byte_chars[] = [self characterAtIndex:i*+];
*whole_byte = strtol(byte_chars, NULL, );
whole_byte++;
} NSData *data = [NSData dataWithBytes:buf length:len];
free( buf );
return data;
}
@end
@implementation NSData (DataToHexString) - (NSString *) dataToHexString
{
NSUInteger len = [self length];
char * chars = (char *)[self bytes];
NSMutableString * hexString = [[NSMutableString alloc] init]; for(NSUInteger i = ; i < len; i++ )
[hexString appendString:[NSString stringWithFormat:@"%0.2hhx", chars[i]]]; return hexString;
}
@end

16进制-

iOS开发之Objective-c的AES128加密和解密算法的实现的更多相关文章

  1. iOS开发之 AES+Base64数据混合加密与解密

    2016-04-08 09:03 编辑: liubinqww 分类:iOS开发 来源:liubinqww 投稿 4 889     "APP的数据安全已经牵动着我们开发者的心,简单的MD5/ ...

  2. iOS开发之Objective-c的AES256加密和解密算法的实现

    原文:http://www.lidaren.com/archives/1470 高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法. 以下实现 ...

  3. iOS开发之Socket通信实战--Request请求数据包编码模块

    实际上在iOS很多应用开发中,大部分用的网络通信都是http/https协议,除非有特殊的需求会用到Socket网络协议进行网络数 据传输,这时候在iOS客户端就需要很好的第三方CocoaAsyncS ...

  4. iOS开发之UISearchBar初探

    iOS开发之UISearchBar初探 UISearchBar也是iOS开发常用控件之一,点进去看看里面的属性barStyle.text.placeholder等等.但是这些属性显然不足矣满足我们的开 ...

  5. iOS开发之UIImage等比缩放

    iOS开发之UIImage等比缩放 评论功能真不错 评论开通后,果然有很多人吐槽.谢谢大家的支持和关爱,如果有做的不到的地方,还请海涵.毕竟我一个人的力量是有限的,我会尽自己最大的努力大家准备一些干货 ...

  6. iOS开发之 Xcode6 添加xib文件,去掉storyboard的hello world应用

    iOS开发之  Xcode6.1创建仅xib文件,无storyboard的hello world应用 由于Xcode6之后,默认创建storyboard而非xib文件,而作为初学,了解xib的加载原理 ...

  7. iOS开发之loadView、viewDidLoad及viewDidUnload的关系

    iOS开发之loadView.viewDidLoad及viewDidUnload的关系 iOS开发之loadView.viewDidLoad及viewDidUnload的关系    标题中所说的3个方 ...

  8. iOS开发之info.pist文件和.pch文件

    iOS开发之info.pist文件和.pch文件 如果你是iOS开发初学者,不用过多的关注项目中各个文件的作用.因为iOS开发的学习路线起点不在这里,这些文件只会给你学习带来困扰. 打开一个项目,我们 ...

  9. iOS开发之WKWebView简单使用

    iOS开发之WKWebView简单使用   iOS开发之 WKWebVeiw使用 想用UIWebVeiw做的,但是突然想起来在iOS8中出了一个新的WKWebView,算是UIWebVeiw的升级版. ...

随机推荐

  1. [JSOI2007]麻将 模拟 BZOJ1028

    题目描述 麻将是中国传统的娱乐工具之一.麻将牌的牌可以分为字牌(共有东.南.西.北.中.发.白七种)和序数牌(分为条子.饼子.万子三种花色,每种花色各有一到九的九种牌),每种牌各四张. 在麻将中,通常 ...

  2. Linux磁盘占满 no space left on device

    假如当前文件删除了,如果还有其他进程还在使用这个文件,这个文件删不干净:https://www.cnblogs.com/heyonggang/p/3644736.html 在Linux下查看磁盘空间使 ...

  3. Qt 学习之路 2(57):可视化显示数据库数据

    Qt 学习之路 2(57):可视化显示数据库数据(skip) 豆子 2013年6月26日 Qt 学习之路 2 26条评论 前面我们用了两个章节介绍了 Qt 提供的两种操作数据库的方法.显然,使用QSq ...

  4. Flask (五) RESTful API

    RESTful API 什么是REST 一种软件架构风格.设计风格.而不是标准,只是提供了一组设计原则和约束条件.它主要用户客户端和服务器交互类的软件.基于这个风格设计的软件可以更简洁,更有层次,更易 ...

  5. python学习之路---day02

    一:while循环 while 条件语句 #如果条件成立则执行下面的循环语句 循环语句 eg1:1+2+3+4+5......+100=? num=0 #给num和sum赋初值 sum=0 while ...

  6. 使用Swagger生成简单接口文档

    使用swagger通过简单的配置可以生成简单的接口文档: 依赖包: // Swagger2 compile 'io.springfox:springfox-swagger2:2.8.0' compil ...

  7. C++_类和动态内存分配5-使用指向对象的指针

    再探new和delete new为创建的每一个对象的名称字符串分配存储空间,这是在构造函数中进行的: 析构函数使用delete来释放这些内存. 字符串是一个字符数组,所以析构函数使用的是带中括号的de ...

  8. bzoj4548: 小奇的糖果 题解

    题目链接 题解 不包含所有颜色 就强制不选一个颜色 图中圆点颜色相同 矩形越大,包括的点一定不比其一小部分少 如图所示,最大矩形只有3种 离散化\(x\)坐标 然后按\(y\)排序 每次取出颜色的前驱 ...

  9. 上海高校程序设计竞赛 D CSL 的字符串 ( 贪心)

    题目描述 CSL 以前不会字符串算法,经过一年的训练,他还是不会……于是他打算向你求助. 给定一个字符串,只含有可打印字符,通过删除若干字符得到新字符串,新字符串必须满足两个条件: 原字符串中出现的字 ...

  10. vue的props和$emit / 父子组件通信

    props 父级: 父级组件中引用子组件,并将自己data下面的giveChild数据绑定在  giveChildData  传给子 <myChild :giveChildData=" ...