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. Failed to load or instantiate

    Failed to load or instantiate: add this code in your xml: xmlns:android="http://schemas.android ...

  2. JAVA项目JDK版本修改

    1.添加JDK    window-----> preferences 2.设置默认JDK版本 3.在项目上右键------>Properties

  3. ITEYE中的读书笔记:重构其实就是持续改进

    原文地址:http://hawkon.iteye.com/blog/2093338#bc2355877 前段时间同事参加ITEYE的试读有奖, 没想到得了个奖,拿到一本书.由于同事的推荐我也认真读了一 ...

  4. 2016.6.20 计算机网络复习要点第三章之CSMA/CD协议

    1.最早的以太网是将许多计算机都连接到一根总线上: (1)总线的特点是:当一台计算机发送数据时,总线上的所有计算机都检测到这个数据,这种就是广播通信方式: (2)为了实现在总线上的一对一通信,可以使每 ...

  5. javascript优化--08模式(代码复用)01

    优先使用对象组合,而不是类继承: 类式继承:通过构造函数Child()来获取来自于另一个构造函数Parent()的属性: 默认模式:子类的原型指向父类的一个实例 function inherit(C, ...

  6. spring实战二之Bean的自动装配(非注解方式)

    Bean的自动装配 自动装配(autowiring)有助于减少甚至消除配置<property>元素和<constructor-arg>元素,让Spring自动识别如何装配Bea ...

  7. LightOJ1086 Jogging Trails(欧拉回路+中国邮递员问题+SPFA)

    题目求从某点出发回到该点经过所有边至少一次的最短行程. 这个问题我在<图论算法理论.实现及应用>中看过,是一个经典的问题——中国邮递员问题(CPP, chinese postman pro ...

  8. JavaScript 开发进阶:理解 JavaScript 作用域和作用域链

    作用域是JavaScript最重要的概念之一,想要学好JavaScript就需要理解JavaScript作用域和作用域链的工作原理.今天这篇文章对JavaScript作用域和作用域链作简单的介绍,希望 ...

  9. 有关g++编译调试的问题

    打了个指针版的treap,想用gdb调试,用gcc -g ×××.cpp -o a 时却报错了——直接用gcc编译却不会报错,提示:对‘operator new(unsigned int)’未定义的引 ...

  10. MySQL配置SQL Assistant提示

    以前开发一直使用SQL Server数据库,提示插件采用的就是SQL Assistant,写起脚本来相当有效率.这段时间公司转型要采用MySQL数据库,试用了mysql workbench.mysql ...