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. -(NSString *) 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:(NSString *)input
      {
          const char *cstr = [input cStringUsingEncoding:NSUTF8StringEncoding];
          NSData *data = [NSData dataWithBytes:cstr length:input.length];
          
          uint8_t digest[CC_SHA1_DIGEST_LENGTH];
          
          CC_SHA1(data.bytes, data.length, digest);
          
          NSMutableString *output = [NSMutableString stringWithCapacity:CC_SHA1_DIGEST_LENGTH * 2];
          
          for(int i=0; i<CC_SHA1_DIGEST_LENGTH; i++) {
              [output appendFormat:@"%02x", digest[i]];
          }
          
          return output;
      }
    18. 当然也可以结合BASE64来使用,这里的BASE64编码使用 GTMBase64实现,需要导入
    19. - (NSString *) sha1_base64
    20. {
    21. const charchar *cstr = [self cStringUsingEncoding:NSUTF8StringEncoding];
    22. NSData *data = [NSData dataWithBytes:cstr length:self.length];
    23. uint8_t digest[CC_SHA1_DIGEST_LENGTH];
    24. CC_SHA1(data.bytes, data.length, digest);
    25. NSData * base64 = [[NSData alloc]initWithBytes:digest length:CC_SHA1_DIGEST_LENGTH];
    26. base64 = [GTMBase64 encodeData:base64];
    27. NSString * output = [[NSString alloc] initWithData:base64 encoding:NSUTF8StringEncoding];
    28. return output;
    29. }
    30. - (NSString *) md5_base64
    31. {
    32. const charchar *cStr = [self UTF8String];
    33. unsigned char digest[CC_MD5_DIGEST_LENGTH];
    34. CC_MD5( cStr, strlen(cStr), digest );
    35. NSData * base64 = [[NSData alloc]initWithBytes:digest length:CC_MD5_DIGEST_LENGTH];
    36. base64 = [GTMBase64 encodeData:base64];
    37. NSString * output = [[NSString alloc] initWithData:base64 encoding:NSUTF8StringEncoding];
    38. return output;
    39. }
    40. 通过拓展NSString,实现完整功能,全部代码
    41. @interface NSString (encrypto)
    42. - (NSString *) md5;
    43. - (NSString *) sha1;
    44. - (NSString *) sha1_base64;
    45. - (NSString *) md5_base64;
    46. - (NSString *) base64;
    47. @end
    48. @implementation NSString (encrypto)
    49. - (NSString*) sha1
    50. {
    51. const charchar *cstr = [self cStringUsingEncoding:NSUTF8StringEncoding];
    52. NSData *data = [NSData dataWithBytes:cstr length:self.length];
    53. uint8_t digest[CC_SHA1_DIGEST_LENGTH];
    54. CC_SHA1(data.bytes, data.length, digest);
    55. NSMutableString* output = [NSMutableString stringWithCapacity:CC_SHA1_DIGEST_LENGTH * 2];
    56. for(int i = 0; i < CC_SHA1_DIGEST_LENGTH; i++)
    57. [output appendFormat:@"%02x", digest[i]];
    58. return output;
    59. }
    60. -(NSString *) md5
    61. {
    62. const charchar *cStr = [self UTF8String];
    63. unsigned char digest[CC_MD5_DIGEST_LENGTH];
    64. CC_MD5( cStr, strlen(cStr), digest );
    65. NSMutableString *output = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2];
    66. for(int i = 0; i < CC_MD5_DIGEST_LENGTH; i++)
    67. [output appendFormat:@"%02x", digest[i]];
    68. return output;
    69. }
    70. - (NSString *) sha1_base64
    71. {
    72. const charchar *cstr = [self cStringUsingEncoding:NSUTF8StringEncoding];
    73. NSData *data = [NSData dataWithBytes:cstr length:self.length];
    74. uint8_t digest[CC_SHA1_DIGEST_LENGTH];
    75. CC_SHA1(data.bytes, data.length, digest);
    76. NSData * base64 = [[NSData alloc]initWithBytes:digest length:CC_SHA1_DIGEST_LENGTH];
    77. base64 = [GTMBase64 encodeData:base64];
    78. NSString * output = [[NSString alloc] initWithData:base64 encoding:NSUTF8StringEncoding];
    79. return output;
    80. }
    81. - (NSString *) md5_base64
    82. {
    83. const charchar *cStr = [self UTF8String];
    84. unsigned char digest[CC_MD5_DIGEST_LENGTH];
    85. CC_MD5( cStr, strlen(cStr), digest );
    86. NSData * base64 = [[NSData alloc]initWithBytes:digest length:CC_MD5_DIGEST_LENGTH];
    87. base64 = [GTMBase64 encodeData:base64];
    88. NSString * output = [[NSString alloc] initWithData:base64 encoding:NSUTF8StringEncoding];
    89. return output;
    90. }
    91. - (NSString *) base64
    92. {
    93. NSData * data = [self dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
    94. data = [GTMBase64 encodeData:data];
    95. NSString * output = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    96. return output;
    97. }
    98. @end
    99. 实现时候不要忘记导入CC相关的库的头文件
    100. CommonCrypto/CommonDigest.h

iOS开发之Objective-c的MD5/SHA1加密算法的实现的更多相关文章

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

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

  2. iOS开发之UISearchBar初探

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

  3. iOS开发之UIImage等比缩放

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

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

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

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

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

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

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

  7. iOS开发之WKWebView简单使用

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

  8. iOS 开发之Block

    iOS 开发之Block 一:什么是Block.Block的作用 UI开发和网络常见功能的实现回调,按钮事件的处理方法是回调方法. 1.     按钮事件 target action 机制. 它是将一 ...

  9. iOS开发之Xcode常用调试技巧总结

    转载自:iOS开发之Xcode常用调试技巧总结 最近在面试,面试过程中问到了一些Xcode常用的调试技巧问题.平常开发过程中用的还挺顺手的,但你要突然让我说,确实一脸懵逼.Debug的技巧很多,比如最 ...

  10. 李洪强iOS开发之Block和协议

    李洪强iOS开发之Block和协议 OC语言BLOCK和协议 一.BOLCK (一)简介 BLOCK是什么?苹果推荐的类型,效率高,在运行中保存代码.用来封装和保存代码,有点像函数,BLOCK可以在任 ...

随机推荐

  1. JS插件

    1.Placeholders.js 所有的浏览器都支持placeholder,唯独IE不支持.现在我们有了这款插件,IE下终于可以支持了! 2.Html5shiv.js 主要解决HTML5提出的新的元 ...

  2. JAVA定时执行任务,每天定时几点钟执行任务

    JAVA定时执行任务,每天定时几点钟执行任务的示例如下: 1.建立TimerManage类,设置时间点,时间点设置的管理类,代码如下: package com.pcitc.time; import j ...

  3. LCIS HDOJ 4512 吉哥系列故事——完美队形I

    题目传送门 题意:中文题面 分析:LCIS应用:设置b[]为a[]的反转,然后LCIS,若相等的是自己本身,则+1, 否则+2 代码: #include <cstdio> #include ...

  4. WPF 文本框添加水印效果

    有的时候我们需要为我们的WPF文本框TextBox控件添加一个显示水印的效果来增强用户体验,比如登陆的时候提示输入用户名,输入密码等情形.如下图所示: 这个时候我们除了可以修改TextBox控件的控件 ...

  5. BZOJ3563 : DZY Loves Chinese

    想法题,由于K是加密的,但是通过读入我们可以自己数出来这一行有几个数, 所以可以直接反解出之前回答为连通的个数 至于最后一个询问就用并查集暴力回答 var n,i,m,s,k,j,q : longin ...

  6. Strong TLS configuration on servers

    - Use certificates with at least sha-256 hash algorithms (including intermediate certificates).- Use ...

  7. erlang-jiffy 安装手记

    今天安装 erlang-jiffy 把握逼疯,不过最后还是成功了. 错误避免: rebar只能再英文目录下运行,如果编译jiffy的目录中有中文或其它unicode字符,将会出错 从git relea ...

  8. edtftpj让Java上传FTP文件支持断点续传

    在用Java实现FTP上传文件功能时,特别是上传大文件的时候,可以需要这样的功能:程序在上传的过程中意外终止了,文件传了一大半,想从断掉了地方继续传:或者想做类似迅雷下载类似的功能,文件太大,今天传一 ...

  9. [转]支付宝接口程序、文档及解读(ASP.NET)

    本文转自:http://www.cnblogs.com/blodfox777/archive/2009/11/03/1595223.html 最近需要为网站加入支付宝的充值接口,而目前关于支付宝接口开 ...

  10. 《GK101任意波发生器》升级固件发布(版本:1.0.2build306)

    一.固件说明: 硬件版本:0,logic.3 固件版本:1.0.2.build306 编译日期:2014-09-24 ====================================== 二. ...