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. spark streaming中使用flume数据源

    有两种方式,一种是sparkstreaming中的driver起监听,flume来推数据:另一种是sparkstreaming按照时间策略轮训的向flume拉数据. 最开始我以为只有第一种方法,但是尼 ...

  2. MAXIMO移动解决方案在库存管理中的PDA应用系统

    随着无线网络通信技术.掌上电脑技术以及条形码自动识别技术的推广使用,为了强化MAXIMO系统库存管理的功能,着手开发MAXIMO移动应用解决方案. 该解决方案集成了无线局域网络通信.掌上电脑以及条形码 ...

  3. http://www.roncoo.com/article/detail/124822

    http://www.roncoo.com/article/detail/124822

  4. POJ2762 Going from u to v or from v to u?(判定单连通图:强连通分量+缩点+拓扑排序)

    这道题要判断一张有向图是否是单连通图,即图中是否任意两点u和v都存在u到v或v到u的路径. 方法是,找出图中所有强连通分量,强连通分量上的点肯定也是满足单连通性的,然后对强连通分量进行缩点,缩点后就变 ...

  5. CSGrandeur的WebGL学习——WebGL教程

    在线查看:http://csgrandeur.gitbooks.io/webgl-learn/content/ 离线mobi:http://files.cnblogs.com/files/CSGran ...

  6. python+pygame游戏开发之使用Py2exe打包游戏

    最近在用python+pygame 开发游戏,写完以后在分享给朋友玩的时候遇到了很大的问题,只有搭建了环境才能运行python脚本. 这会吓退99%以上的人……所以把我们的游戏打包(注意是打包而不是编 ...

  7. 【POJ】2104 K-th Number(区间k大+主席树)

    http://poj.org/problem?id=2104 裸题不说.主席树水过. #include <cstdio> #include <iostream> #includ ...

  8. Autoencoder

    AutoencoderFrom Wikipedia An autoencoder, autoassociator or Diabolo network[1]:19 is an artificial n ...

  9. sql2005 全文索引

    1.打开全文索引 一.检查服务里面带有Full-text字样的服务是否存在并开启! [](http://images2015.cnblogs.com/blog/23017/201611/23017-2 ...

  10. [转]ASP.NET中的forms验证

    本文转自:http://www.cnblogs.com/fengzheng126/archive/2012/04/06/2435513.html ASP.NET的安全认证:Windows验证 (默认) ...