//需要导入   #import <CommonCrypto/CommonCryptor.h>

==============MD5加密============

NSString *str = @"加密的内容";

//转换成C语言的字符串

const char *cStr=[str UTF8String];

//MD5加密的结果是128位,需要开辟一个16字节的空间

unsigned char result[16];

//调用加密函数

CC_MD5(cStr, (unsigned int)strlen(cStr), result);

//通过上面这个方法获取的MD5是一个16个字符的数组,需要转换成32位的MD5值

NSMutableString *string = [NSMutableString stringWithCapacity:10];

for (int i=; i<16; i++) {

[string appendString:[NSString stringWithFormat:@"%02x",result[i]]];

}

NSLog(@"MD5加密:%@",string);

===============base64加密解密=============

//ios7 以后提供了base64的转码方式

//加密

NSString *pass=@"加密的内容";

NSData *passData=[pass dataUsingEncoding:NSUTF8StringEncoding];

NSString *result = [passData base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithLineFeed];

NSLog(@"base64加密:%@",result);

//解密

NSData *decodeData = [[NSData alloc]initWithBase64EncodedString:result options:];

NSString *decodeStr = [[NSString alloc]initWithData:decodeData encoding:NSUTF8StringEncoding];

NSLog(@"base64解密:%@",decodeStr);

================AES加密解密===============

//新建一个NSData类,写入一下两个方法

//加密方法

- (NSData*)AES256EncryptWithKey:(NSString*)key {

char keyPtr[kCCKeySizeAES256 + 1]; // room for terminator (unused)

bzero(keyPtr, sizeof(keyPtr)); // fill with zeroes (for padding)

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

NSUInteger dataLength = [self length];

size_t bufferSize           = dataLength + kCCBlockSizeAES128;

void* buffer                = malloc(bufferSize);

size_t numBytesEncrypted    = ;

CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding,

keyPtr, kCCKeySizeAES256,

NULL /* initialization vector (optional) */,

[self bytes], dataLength, /* input */

buffer, bufferSize, /* output */

&numBytesEncrypted);

if (cryptStatus == kCCSuccess) {

return [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted];

}

free(buffer);

return nil;

}

//解密方法

- (NSData*)AES256DecryptWithKey:(NSString*)key {

char keyPtr[kCCKeySizeAES256 + 1]; // room for terminator (unused)

bzero(keyPtr, sizeof(keyPtr)); // fill with zeroes (for padding)

// fetch key data

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

NSUInteger dataLength = [self length];

size_t bufferSize           = dataLength + kCCBlockSizeAES128;

void* buffer                = malloc(bufferSize);

size_t numBytesDecrypted    = ;

CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding,

keyPtr, kCCKeySizeAES256,

NULL /* initialization vector (optional) */,

[self bytes], dataLength, /* input */

buffer, bufferSize, /* output */

&numBytesDecrypted);

if (cryptStatus == kCCSuccess) {

return [NSData dataWithBytesNoCopy:buffer length:numBytesDecrypted];

}

free(buffer); //free the buffer;

在另外的类里面调用上面NSData里面的方法

//==========AES加密解密=============

NSString *key = @"mykey";//钥匙

NSString *secret = @"加密内容";//准备加密的内容

NSData *plain = [secret dataUsingEncoding:NSUTF8StringEncoding];

NSData *ciper = [plain AES256EncryptWithKey:key];

NSLog(@"AES加密%@",ciper);

//解密

plain = [ciper AES256DecryptWithKey:key];

NSLog(@"AES解密:%@",[[NSString alloc]initWithData:plain encoding:NSUTF8StringEncoding]);

iOS之加密的三种方法的更多相关文章

  1. iOS拨打电话(三种方法)

    iOS拨打电话(三种方法)  查了很多地方的关于iOS程序拨打电话,大都不全,今天我总结了三种方法,各有不同,拿来给大家分享,希望给大家有所帮助 1,这种方法,拨打完电话回不到原来的应用,会停留在通讯 ...

  2. Chrome模拟手机浏览器(iOS/Android)的三种方法,亲测无误!

    大网站都有推出自己的手机访问版本页面,不管是新闻类还是视频网站,我们在电脑是无法直接访问到手机网站的,比如我经常访问一个3g.qq.com这个手机站点,如果在电脑上直接打开它,则会跳转到其它页面,一般 ...

  3. 用Fiddler可以设置浏览器的UA 和 手动 --Chrome模拟手机浏览器(iOS/Android)的三种方法,亲测无误!

    附加以一种软件的方法是:用Fiddler可以设置浏览器的UA 以下3种方法是手动的 通过伪装User-Agent,将浏览器模拟成Android设备. 第一种方法:新建Chrome快捷方式 右击桌面上的 ...

  4. iOS 处理缓存的三种方法

    缓存处理是个相当头疼的事情,要根据需要综合应用不同的策略.总的来说有以下几种情况: 1.URL缓存,例如社交应用的帖子浏览,要在viewDidAppear:里面进行URL缓存.简单来说就是用NSURL ...

  5. iOS 拨打电话三种方法

    小弟查了很多地方的关于iOS程序拨打电话,大都不全,今天我总结了三种方法,各有不同,拿来给大家分享,希望给大家有所帮助1,这种方法,拨打完电话回不到原来的应用,会停留在通讯录里,而且是直接拨打,不弹出 ...

  6. 应对加密js的三种方法

    经常遇到网页在登录后会对用户输入的帐号和密码通过js进行加密,导致模拟登录这类网站时受到阻碍 这里小记一下当前解决该问题的三种方法 1.利用python实现js同等加密. 2.利用selenium模拟 ...

  7. [mysql]三种方法为root账户指定密码

    前言:前段时间把mysql安装后一直没管它,当时就在奇怪为什么mysql登陆不要密码,原来一直用的超用户账户登陆的(简称超级用户) 其实只怪自己太无知,之前一直用的phpbydamin进行的数据库的可 ...

  8. iOS拨打电话的三种方式

    iOS拨打电话的三种方式 1,这种方法,拨打完电话回不到原来的应用,会停留在通讯录里,而且是直接拨打,不弹出提示 1 2 var string = "tel:" + "1 ...

  9. 利用Objective-C运行时hook函数的三种方法

    版权声明:转载请注明出处:http://blog.csdn.net/hursing 方法一,hook已有公开头文件的类: 首先写一个Utility函数: #import <objc/runtim ...

随机推荐

  1. 2014 年最热门的国人开发开源软件 TOP 100 - 开源中国社区

    不知道从什么时候开始,很多一说起国产好像就非常愤慨,其实大可不必.做开源中国六年有余,这六年时间国内的开源蓬勃发展,从一开始的使用到贡献,到推出自己很多的开源软件,而且还有很多软件被国外的认可.中国是 ...

  2. MVC4做网站后台:栏目管理2、修改栏目

    接上节添加栏目. 修改栏目与添加栏目非常相似,主要区别在于先向视图传递要修改栏目的model.另外在保存时比添加栏目验证要更多一些. 1.要验证父栏目不能是其本身: 2.父栏目不能是其子栏目: 3.父 ...

  3. 深入理解javascript对象系列第二篇——属性操作

    × 目录 [1]查询 [2]设置 [3]删除[4]继承 前面的话 对于对象来说,属性操作是绕不开的话题.类似于“增删改查”的基本操作,属性操作分为属性查询.属性设置.属性删除,还包括属性继承.本文是对 ...

  4. 创建 VXLAN - 每天5分钟玩转 OpenStack(111)

    前面我们讨论了 VXLAN 的理论知识,并且在 ML2 中完成了相关配置.今天将通过 Web UI 创建 vxlan100_net 并观察节点网络结构的变化. 打开菜单 Admin -> Net ...

  5. Objective-C精选字符串处理方法

    无论是什么编程语言对字符串的操作是少不了的,对复杂的字符串的分析和操作我们可以用正则表达式来达到我们的目的.简单的字符串处理我们可以借助OC中NSString封装好的字符串处理方法,不过前提是你得了解 ...

  6. 1Z0-053 争议题目解析684

    1Z0-053 争议题目解析684 考试科目:1Z0-053 题库版本:V13.02 题库中原题为: 684.Your database is running in ARCHIVELOG mode. ...

  7. 使用idea debug多线程

    最近采用hystrix远程访问webservice, 遇到一个重定向303的exception,想要debug一下,发现打了断点后总是被跳过.想到hystrix异步线程的问题,于是想要debug就得支 ...

  8. Net设计模式实例之桥接模式( Bridge Pattern)

    一.桥接模式简介(Brief Introduction) 桥接模式(Bridge Pattern),将抽象部分与它的实现部分分离,使的抽象和实现都可以独立地变化. Decouple an abstra ...

  9. easyui combotree的使用

    前台HTML: <div class="search-container"> <table class="search-container-table& ...

  10. gRPC C#学习

    前些天gRPC 发布1.0 版本,代表着gRPC 已经正式进入稳定阶段. 今天我们就来学习gRPC C# .而且目前也已经支持.NET Core 可以实现完美跨平台. 传统的.NET 可以通过Mono ...