IOS开发之----常用加密方法

本文转载至 http://blog.csdn.net/wildfireli/article/details/23191983

 

(AES、MD5、Base64) 分类: iPhone 2014-04-08 16:30 187人阅读 评论(0) 收藏 举报 目录(?)[+] 1、AES加密 NSData+AES.h文件 // // NSData-AES.h // Smile // // Created by Gary on 12-11-24. // Copyright (c) 2012年 BOX. All rights reserved. // #import @class NSString; @interface NSData (Encryption) - (NSData *)AES256EncryptWithKey:(NSString *)key; //加密 - (NSData *)AES256DecryptWithKey:(NSString *)key; //解密 @end NSData+AES.m文件 // // NSData-AES.h // Smile // // Created by Gary on 12-11-24. // Copyright (c) 2012年 BOX. All rights reserved. // #import "NSData+AES.h" #import @implementation NSData (Encryption) - (NSData *)AES256EncryptWithKey:(NSString *)key {//加密 char keyPtr[kCCKeySizeAES256+1]; bzero(keyPtr, sizeof(keyPtr)); [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding]; NSUInteger dataLength = [self length]; size_t bufferSize = dataLength + kCCBlockSizeAES128; void *buffer = malloc(bufferSize); size_t numBytesEncrypted = 0; CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding | kCCOptionECBMode, keyPtr, kCCBlockSizeAES128, NULL, [self bytes], dataLength, buffer, bufferSize, &numBytesEncrypted); if (cryptStatus == kCCSuccess) { return [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted]; } free(buffer); return nil; } - (NSData *)AES256DecryptWithKey:(NSString *)key {//解密 char keyPtr[kCCKeySizeAES256+1]; bzero(keyPtr, sizeof(keyPtr)); [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding]; NSUInteger dataLength = [self length]; size_t bufferSize = dataLength + kCCBlockSizeAES128; void *buffer = malloc(bufferSize); size_t numBytesDecrypted = 0; CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding | kCCOptionECBMode, keyPtr, kCCBlockSizeAES128, NULL, [self bytes], dataLength, buffer, bufferSize, &numBytesDecrypted); if (cryptStatus == kCCSuccess) { return [NSData dataWithBytesNoCopy:buffer length:numBytesDecrypted]; } free(buffer); return nil; } @end 这里AES在iOS加过密以后以nsdata的形式存下来,如果想以nsstring形式存储,那么对nsdata进行base64位编码。 2、BASE64编码 首先下载GTMBase64文件,在工程中加入三个文件 GTMDefines.h GTMBase64.h GTMBase64.m 你可以在这里找到这三个文件 http://code.google.com/p/google-toolbox-for-mac/source/browse/trunk/Foundation/?r=87 你也可以在下面的demo里面找到这3个文件,demo会完整实现文章里面常用的3种编码方法。 我在此稍微封装一下: .h文件 #pragma mark - base64 + (NSString*)encodeBase64String:(NSString *)input; + (NSString*)decodeBase64String:(NSString *)input; + (NSString*)encodeBase64Data:(NSData *)data; + (NSString*)decodeBase64Data:(NSData *)data; .m文件 #pragma mark - base64 + (NSString*)encodeBase64String:(NSString * )input { NSData *data = [input dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES]; data = [GTMBase64 encodeData:data]; NSString *base64String = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease]; return base64String; } + (NSString*)decodeBase64String:(NSString * )input { NSData *data = [input dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES]; data = [GTMBase64 decodeData:data]; NSString *base64String = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease]; return base64String; } + (NSString*)encodeBase64Data:(NSData *)data { data = [GTMBase64 encodeData:data]; NSString *base64String = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease]; return base64String; } + (NSString*)decodeBase64Data:(NSData *)data { data = [GTMBase64 decodeData:data]; NSString *base64String = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease]; return base64String; } 3、MD5加密 NSString+MD5.h文件 // // NSString+MD5Encrypt.h // Smile // // Created by Gary on 12-11-24. // Copyright (c) 2012年 BOX. All rights reserved. // #import @interface NSString (MD5) - (NSString *)md5Encrypt; @end NSString+MD5.m文件 // // NSString+MD5Encrypt.h // Smile // // Created by Gary on 12-11-24. // Copyright (c) 2012年 BOX. All rights reserved. // #import "NSString+MD5.h" @implementation NSString (MD5) - (NSString *)md5Encrypt { const char *original_str = [self UTF8String]; unsigned char result[CC_MD5_DIGEST_LENGTH]; CC_MD5(original_str, strlen(original_str), result); NSMutableString *hash = [NSMutableString string]; for (int i = 0; i < 16; i++) [hash appendFormat:@"X", result[i]]; return [hash lowercaseString]; } @end

转载于:https://www.cnblogs.com/Camier-myNiuer/p/4326198.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/398416.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JAVA并发编程实战---第三章:对象的共享(2)

线程封闭 如果仅仅在单线程内访问数据&#xff0c;就不需要同步&#xff0c;这种技术被称为线程封闭&#xff0c;它是实现线程安全性的最简单的方式之一。当某个对象封闭在一个线程中时&#xff0c;这种方法将自动实现线程安全性&#xff0c;即使被封闭的对象本生不是线程安全的…

Python----面向对象---自定义元类控制类的实例化行为的应用

一、单例模式 1 class Mysql:2 def __init__(self):3 self.host 127.0.0.14 self.port 33065 6 7 obj1 Mysql()8 obj2 Mysql()9 10 print(obj1) 11 print(obj2) 12 13 结果为&#xff1a; 14 15 <__main__.Mysql object at 0x0000021CBF4DB588&g…

流行的编程语言及其趋势

转&#xff1a;StackOverflow上的编程趋势 http://www.csdn.net/article/2013-07-08/2816144-StackOverflow-Programming-Trends 摘要&#xff1a;相信每个程序员都知道StackOverflow问答网站&#xff0c;本文作者dodgy_coder通过StackExchange Data Explorer Query收集了该网站…

史上最全面,清晰的SharedPreferences解析

基础用法获取Sp:getput监听器原理分析获取SharedPreferences构造SharedPreferencesgetX原理分析putX原理分析创建editorputStringapplyapply总结commitSharedPreferences最佳实践勿存储过大value勿存储复杂数据不要乱edit和apply&#xff0c;尽量批量修改一次提交建议apply&…

【译】《学习JavaScript设计模式》(二)

原书链接Learning JavaScript Design Patterns水平有限很多地方不通顺&#xff0c;错翻漏翻欢迎交流。 模式测试&#xff0c;原生模式&约法三章 记住并不是所有的算法啊&#xff0c;最佳实践啊&#xff0c;解决方案啊什么的都可以被称为一个完整的模式的。很可能它就缺了点…

I.Mx6 使用串口连接PSAM卡的注意事项

&#xff5b;背景&#xff5d; 1. 使用模拟方式与PSAM卡进行通信&#xff0c;对时序的要求非常严格&#xff0c;在自己的代码中一定要做好相关延时尤其是每个etu的时间 要测量准确。 2. 使用串口方式与PSAM卡直连&#xff0c;是硬件级的通信&#xff0c;写起来相对容易一些。 &…

CentOS7.0 安装 tomcat-9.0

2019独角兽企业重金招聘Python工程师标准>>> 1、解压 # tar -zxvf apache-tomcat-9.0.0.M4.tar.gz -C /opt/usr/local 改个名字好以后操作&#xff1a; # mv apache-tomcat-9.0.0.M4.tar.gz tomcat 2、启动&停止 # /opt/usr/local/tomcat/bin/start…

SpringMVC转发和重定向

页面间的跳转分为转发和重定向 但是转发和重定向在springMVC里又分为转发到页面和重定向到页面&#xff0c;转发到处理器方法和重定向到处理器方法 下边是具体实现功能的代码&#xff1a; 转发到页面和重定向到页面 //转发到页面RequestMapping("/five")public Strin…

一幅长文细学华为MRS大数据开发(四)——HBase

4 HBase 摘要&#xff1a;HBase是一种非关系型数据库&#xff0c;它是基于谷歌BigTable的开源实现&#xff0c;和BigTable一样&#xff0c;支持大规模海量数据的存储&#xff0c;对于分布式并发数据处理的效率极高&#xff0c;易于扩展且支持动态伸缩&#xff0c;适用于廉价设备…

AOP技术基础

1、引言2、AOP技术基础 3、Java平台AOP技术研究4、.Net平台AOP技术研究2.1 AOP技术起源 AOP技术的诞生并不算晚&#xff0c;早在1990年开始&#xff0c;来自Xerox Palo Alto Research Lab&#xff08;即PARC&#xff09;的研究人员就对面向对象思想的局限性进行了分析。他们研…

Could not find a package,configuration file provided by G2O ,G2OConfig.cmake,g2o-config.cmake

因为项目需要使用到g2o&#xff0c;所以自己从git上面clone下来&#xff0c; git clone https://github.com/RainerKuemmerle/g2o.git 然后&#xff1a; cd g2o mkdir build cd build cmake .. make -j4 编译完成&#xff0c;并在CMakeLists.txt使用g2o&#xff1a; set(G2O_DI…

TCP 协议的三次握手、四次分手

详细描述了 TCP 协议的连接和关闭的整个过程。解释了为什么 TCP 协议是面向连接的、可靠的数据传输协议。 TCP 在互联网上之间的通信交流&#xff0c;一般是基于 TCP (Transmission Control Protocol&#xff0c;传输控制协议) 或者 UDP (User Datagram Protocol&#xff0c;用…

prefix.pch文件的一些简单使用

该文件可以引入一些全局通用的文件&#xff0c;这样就不用每次在文件中导入&#xff0c;也可以定义全局通用的变量或常量&#xff0c;如 //定义NSString常量 #define ServiceName "cn.zmfc" //定义颜色 #define BackgroudColor [UIColor colorWithRed:232/2…

[Bzoj4182]Shopping(点分治)(树上背包)(单调队列优化多重背包)

4182: Shopping Time Limit: 30 Sec Memory Limit: 128 MBSubmit: 374 Solved: 130[Submit][Status][Discuss]Description 马上就是小苗的生日了&#xff0c;为了给小苗准备礼物&#xff0c;小葱兴冲冲地来到了商店街。商店街有n个商店&#xff0c;并且它们之间的道路构成了一…

您不能在64-位可执行文件上设置DEP属性?

我是为dllhost.exe设置DEP时遇到了同样的情况。你需要选择64位系统对应的程序。64位系统&#xff1a;C:\Windows\SysWOW64\dllhost.exe32位系统&#xff1a;C:\Windows\System32\dllhost.exe

应聘者提问环节

http://blog.csdn.net/jinhuiyu/article/details/4487058转载于:https://www.cnblogs.com/wuchanming/p/4333791.html

Tiny框架2.0版火热推出

方法论 方法论决定了可以达到的高度 方法论&#xff0c;就是人们认识世界、改造世界的根本方法。 它是人们用什么样的方式、方法来观察事物和处理问题。概括地说&#xff0c;世界观主要解决世界“是什么”的问题&#xff0c;方法论主要解决“怎么办”的问题。 方法论是一种以解…

Java--Socket通信

下面内容是Java开发内容的高级知识点&#xff0c;需要对Java中的面向对象、IO、多线程、以及网络相关知识有一定的基础。(知识永远都有深度&#xff0c;本章节长期更新内容) 1、网络基础知识 网络通信的条件&#xff1a;1、两个通信的端都要有各自的IP地址作为唯一标识&#xf…

一幅长文细学华为MRS大数据开发(五)——MapReduce和Yarn

5 MapReduce和Yarn 摘要&#xff1a;本文中主要讲述大数据领域中最著名的批处理和离线处理计算框架——MapReduce&#xff0c;包括MapReduce的原理、流程、使用场景&#xff0c;以及Hadoop集群中负责统一的资源管理和调度的组件——Yarn。 作者&#xff1a;来自ArimaMisaki创作…

数据:ContentResolver类

ContentResolver是通过URI来查询ContentProvider中提供的数据。除了URI以 外&#xff0c;还必须知道需要获取的数据段的名称&#xff0c;以及此数据段的数据类型。 如果你需要获取一个特定的记录&#xff0c;你就必须知道当前记录的ID。 简要介绍ContentResolver的主要接口&…