iOS开发数据加密

iOS开发之Objective-c的MD5/SHA1加密算法的实现

2014-05-12 10:10 3757人阅读 评论(0) 收藏 举报

 分类:

数据加密(8) 

版权声明:本文为博主原创文章,未经博主允许不得转载。

[objc] view plaincopy

  1. Objective-c实现MD5和SHA1算法相对还是比较简单的,可以直接调用系统的C/C++共享库来实现调用
  2. MD5即Message Digest Algorithm 5(信息-摘要算法 5),用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一
  3. SHA即Secure Hash Algorithm(安全散列算法) 是美国国家安全局 (NSA) 设计,美国国家标准与技术研究院 (NIST) 发布的一系列密码散列函数。
  4. 使用方式如下:
  5. MD5加密方式
  6. SString *) md5
  7. {
  8. const charchar *cStr = [self UTF8String];
  9. unsigned char digest[CC_MD5_DIGEST_LENGTH];
  10. CC_MD5( cStr, strlen(cStr), digest );
  11. NSMutableString *output = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2];
  12. for(int i = 0; i < CC_MD5_DIGEST_LENGTH; i++)
  13. [output appendFormat:@"%02x", digest[i]];
  14. return output;
  15. }
  16. SHA1加密方式
  17. - (NSString*) sha1
  18. {
  19. const charchar *cstr = [self cStringUsingEncoding:NSUTF8StringEncoding];
  20. NSData *data = [NSData dataWithBytes:cstr length:self.length];
  21. uint8_t digest[CC_SHA1_DIGEST_LENGTH];
  22. CC_SHA1(data.bytes, data.length, digest);
  23. NSMutableString* output = [NSMutableString stringWithCapacity:CC_SHA1_DIGEST_LENGTH * 2];
  24. for(int i = 0; i < CC_SHA1_DIGEST_LENGTH; i++)
  25. [output appendFormat:@"%02x", digest[i]];
  26. return output;
  27. }
  28. 当然也可以结合BASE64来使用,这里的BASE64编码使用 GTMBase64实现,需要导入
  29. - (NSString *) sha1_base64
  30. {
  31. const charchar *cstr = [self cStringUsingEncoding:NSUTF8StringEncoding];
  32. NSData *data = [NSData dataWithBytes:cstr length:self.length];
  33. uint8_t digest[CC_SHA1_DIGEST_LENGTH];
  34. CC_SHA1(data.bytes, data.length, digest);
  35. NSData * base64 = [[NSData alloc]initWithBytes:digest length:CC_SHA1_DIGEST_LENGTH];
  36. base64 = [GTMBase64 encodeData:base64];
  37. NSString * output = [[NSString alloc] initWithData:base64 encoding:NSUTF8StringEncoding];
  38. return output;
  39. }
  40. - (NSString *) md5_base64
  41. {
  42. const charchar *cStr = [self UTF8String];
  43. unsigned char digest[CC_MD5_DIGEST_LENGTH];
  44. CC_MD5( cStr, strlen(cStr), digest );
  45. NSData * base64 = [[NSData alloc]initWithBytes:digest length:CC_MD5_DIGEST_LENGTH];
  46. base64 = [GTMBase64 encodeData:base64];
  47. NSString * output = [[NSString alloc] initWithData:base64 encoding:NSUTF8StringEncoding];
  48. return output;
  49. }
  50. 通过拓展NSString,实现完整功能,全部代码
  51. @interface NSString (encrypto)
  52. - (NSString *) md5;
  53. - (NSString *) sha1;
  54. - (NSString *) sha1_base64;
  55. - (NSString *) md5_base64;
  56. - (NSString *) base64;
  57. @end
  58. @implementation NSString (encrypto)
  59. - (NSString*) sha1
  60. {
  61. const charchar *cstr = [self cStringUsingEncoding:NSUTF8StringEncoding];
  62. NSData *data = [NSData dataWithBytes:cstr length:self.length];
  63. uint8_t digest[CC_SHA1_DIGEST_LENGTH];
  64. CC_SHA1(data.bytes, data.length, digest);
  65. NSMutableString* output = [NSMutableString stringWithCapacity:CC_SHA1_DIGEST_LENGTH * 2];
  66. for(int i = 0; i < CC_SHA1_DIGEST_LENGTH; i++)
  67. [output appendFormat:@"%02x", digest[i]];
  68. return output;
  69. }
  70. -(NSString *) md5
  71. {
  72. const charchar *cStr = [self UTF8String];
  73. unsigned char digest[CC_MD5_DIGEST_LENGTH];
  74. CC_MD5( cStr, strlen(cStr), digest );
  75. NSMutableString *output = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2];
  76. for(int i = 0; i < CC_MD5_DIGEST_LENGTH; i++)
  77. [output appendFormat:@"%02x", digest[i]];
  78. return output;
  79. }
  80. - (NSString *) sha1_base64
  81. {
  82. const charchar *cstr = [self cStringUsingEncoding:NSUTF8StringEncoding];
  83. NSData *data = [NSData dataWithBytes:cstr length:self.length];
  84. uint8_t digest[CC_SHA1_DIGEST_LENGTH];
  85. CC_SHA1(data.bytes, data.length, digest);
  86. NSData * base64 = [[NSData alloc]initWithBytes:digest length:CC_SHA1_DIGEST_LENGTH];
  87. base64 = [GTMBase64 encodeData:base64];
  88. NSString * output = [[NSString alloc] initWithData:base64 encoding:NSUTF8StringEncoding];
  89. return output;
  90. }
  91. - (NSString *) md5_base64
  92. {
  93. const charchar *cStr = [self UTF8String];
  94. unsigned char digest[CC_MD5_DIGEST_LENGTH];
  95. CC_MD5( cStr, strlen(cStr), digest );
  96. NSData * base64 = [[NSData alloc]initWithBytes:digest length:CC_MD5_DIGEST_LENGTH];
  97. base64 = [GTMBase64 encodeData:base64];
  98. NSString * output = [[NSString alloc] initWithData:base64 encoding:NSUTF8StringEncoding];
  99. return output;
  100. }
  101. - (NSString *) base64
  102. {
  103. NSData * data = [self dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
  104. data = [GTMBase64 encodeData:data];
  105. NSString * output = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
  106. return output;
  107. }
  108. @end
  109. 实现时候不要忘记导入CC相关的库的头文件
  110. CommonCrypto/CommonDigest.h
时间: 2024-11-06 04:12:56

iOS开发数据加密的相关文章

iOS开发,让数据更安全的几个加密方式

任何应用的开发中安全都是重中之重,在信息交互异常活跃的现在,信息加密技术显得尤为重要.在app应用开发中,我们需要对应用中的多项数据进行加密处理,从而来保证应用上线后的安全性,给用户一个安全保障.这篇文章就介绍在iOS开发中最常用的数据加密方式. 文中证书锁定内容部分参考了博客http://blog.csdn.net/dd864140130/article/details/52625666. iOS中数据加密的几方式 1.使用数字证书锁定来保证不被中间人拦截,将服务器返回的数据和我的当地证书进行

魔推mpush:IOS开发之数字证书及其原理

IOS开发者通常需要跟各种数字证书.公钥和密钥打交道.相信各位开发者经常会在开发的过程当中经常会被这些证书啊.密钥啊.公钥之类弄的心力憔悴了.今儿,就这个问题跟大家啰嗦两句关于IOS数字证书的问题. 什么是数字证书? 数字证书是互联网的数字形式的标识认证,与护照或驾驶证的智能非常相似.数字证书是一种凭据.提供了某个实体的标识和其他支持信息.数字证书由颁发机构(CA)的权威机构发布的.因此,该权威机构负责担保证书信息的有效性.而且数字证书通常情况下只在特定的时段内有效. 数字证书包含证书中所标识的

iOS开发tips-神奇的UITableView

概述 UITableView是iOS开发中使用频率最高的UI控件,在前面的文章中对于UITableView的具体用法有详细的描述,今天主要看一些UITableView开发中的常见一些坑,这些坑或许不深,但是如果开发中注意不到的话往往比较浪费时间. 神奇的section header 事情的起因是一个网友说要实现一个类似下图界面,但是不管是设置sectionHeaderHeight还是代理方法中实现func tableView(_ tableView: UITableView, heightFor

iOS开发网络篇—文件的上传

iOS开发网络篇—文件的上传 说明:文件上传使用的时POST请求,通常把要上传的数据保存在请求体中.本文介绍如何不借助第三方框架实现iOS开发中得文件上传. 由于过程较为复杂,因此本文只贴出部分关键代码. 主控制器的关键代码: YYViewController.m 1 #import "YYViewController.h" 2 3 #define YYEncode(str) [str dataUsingEncoding:NSUTF8StringEncoding] 4 5 @inter

iOS开发UI篇—推荐两个好用的Xcode插件(提供下载链接)

iOS开发UI篇—推荐两个好用的Xcode插件(提供下载链接) 这里推荐两款好用的Xcode插件,并提供下载链接. 一.插件和使用如下: 1.两款插件 对项目中图片提供自动提示功能的插件:KSImageNamed-Xcode-master 提供快速创建自动注释:VVDocumenter-Xcode-master 2.使用介绍: (1)KSImageNamed-Xcode-master的使用 安装该插件后,会对文件中图片进行智能提示. (2)VVDocumenter-Xcode-master能提供

IOS 开发环境,证书和授权文件等详解

一.成员介绍 1.    Certification(证书) 证书是对电脑开发资格的认证,每个开发者帐号有一套,分为两种: 1)    Developer Certification(开发证书) 安装在电脑上提供权限:开发人员通过设备进行真机测试. 可以生成副本供多台电脑安装: 2)      Distribution Certification(发布证书) 安装在电脑上提供发布iOS程序的权限:开发人员可以制做测试版和发布版的程序. 不可生成副本,仅有配置该证书的电脑才可使用:(副本制做介绍在

iOS开发之保存照片到系统相册(Photo Album)

iOS开发之保存照片到系统相册(Photo Album) 保存照片到系统相册这个功能很多社交类的APP都有的,今天我们简单讲解一下,如何将图片保存到系统相册(Photo Album). 创建UIImageView 创建UIImageView是为了将照片展示出来,我们是要把UIImage保存到系统相册(Photo Album): #define SCREEN [UIScreen mainScreen].bounds.size self.image = [UIImage imageNamed:@"i

iOS开发网络篇—发送GET和POST请求(使用NSURLSession)

iOS开发网络篇—发送GET和POST请求(使用NSURLSession) 说明: 1)该文主要介绍如何使用NSURLSession来发送GET请求和POST请求 2)本文将不再讲解NSURLConnection的使用,如有需要了解NSURLConnection如何发送请求. 详细信息,请参考:http://www.cnblogs.com/wendingding/p/3813706.html 3)本文示例代码发送的请求均为http请求,已经对info.plist文件进行配置. 如何配置,请参考:

iOS开发中UIPopoverController的使用详解

这篇文章主要介绍了iOS开发中UIPopoverController的使用,代码基于传统的Objective-C,需要的朋友可以参考下 一.简单介绍 1.什么是UIPopoverController 是iPad开发中常见的一种控制器(在iPhone上不允许使用) 跟其他控制器不一样的是,它直接继承自NSObject,并非继承自UIViewController 它只占用部分屏幕空间来呈现信息,而且显示在屏幕的最前面 2.使用步骤 要想显示一个UIPopoverController,需要经过下列步骤