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

[objc] view plain copy

    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
时间: 2024-08-29 00:26:02

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

IOS开发之copy的问题

copy的目的就是修改副本,修改原始对象和副本时不会产生干扰. 定义一个不可变属性A,再定义一个可变属性B.用B做添加删除等操作后再将B赋值给A时,有些人习惯用A = B:其实这样是不安全的. 假设有下面的一段代码: ? 1 2 3 4 5 6 7 8 9 10   int main() {    NSMutableString *strM = [NSMutableString [email protected]"123"];    NSString *str = strM;    N

iOS开发之WKWebView简单使用和常用使用场景

iOS开发之 WKWebVeiw使用 想用UIWebVeiw做的,但是突然想起来在iOS8中出了一个新的WKWebView,算是UIWebVeiw的升级版.本着对新事物的好奇,就上网查了一下,但是找了好多个都没说的多了详细,于是就问谷歌,找文档,看看使用方法,试用了一下,果然不错,记录下来,大家分享! WKWebView的特点: 性能高,稳定性好,占用的内存比较小, 支持JS交互 支持HTML5 新特性 可以添加进度条(然并卵,不好用,还是习惯第三方的). 支持内建手势, 据说高达60fps的刷

iOS开发之Auto Layout入门

随着iPhone6与iOS8的临近,适配的问题讲更加复杂,最近学习了一下Auto Layout的使用,与大家分享.  什么是Auto Layout? Auto Layout是iOS6发布后引入的一个全新的布局特性,其目的是弥补以往Autoresizing在布局方面的不足之处,以及未来面对更多尺寸适配时界面布局可以更好的适应. 为什么要用Auto Layout? Autolayout能解决不同屏幕(iPhone4,iPhone5,iPad...)之间的适配问题. 在iPhone4时代开发者只需要适

iOS开发之CocoaPods的使用

透明色:00ff00ff //设置柱状图的颜色                ColorSet cs = new ColorSet();                cs.Id = "colorset1"; #region 设置柱状图的颜色 待开发                    string strColor = oYAXIS.Color;                    switch (strColor)                    {           

iOS开发之UILabel

UILabel是iOS开发中常用的一个组件,主要用来显示内容. UILabel的主要使用如下: ? 1 2 3 4 5 6 7 8 9 10 /*尺寸*/ CGRect labelRect = CGRectMake(100, 100, 80, 40); /*初始化*/ UILabel *titleLabel = [[UILabel alloc] initWithFrame:labelRect]; /*一些属性的设置*/ titleLabel.font = [UIFont systemFontOf

iOS开发之多XIB之间相互关联

Xib link Xib 1.直接加载xib中的UIView 创建一个View1.xib, 随便设一个背景色,加一个标识UILabel, 这样好知道是这个view是哪一个view. 你可以在这个view上加作意的subview,我只是说明原理,所以这儿并没有加作何subview. 最终我的View1如下图: 由于View1会放到其它View上作为subview,所以这儿size是Freeform, Status Bar是:None. 将下面代码放到viewDidLoad中: &1这行代码就是加载

iOS开发之UISearchBar初探

iOS开发之UISearchBar初探 UISearchBar也是iOS开发常用控件之一,点进去看看里面的属性barStyle.text.placeholder等等.但是这些属性显然不足矣满足我们的开发需求.比如:修改placeholder的颜色.修改UISearchBar上面的UITextfield的背景颜色.修改UITextfield上面的照片等等. 为了实现上述的需求,最好写一个UISearchBar的子类就叫LSSearchBar吧 LSSearchBar.h如下: #import <U

iOS开发之MVVM在项目中的应用

今天写这篇博客是想达到抛砖引玉的作用,想与大家交流一下思想,相互学习,博文中有不足之处还望大家批评指正.本篇博客的内容沿袭以往博客的风格,也是以干货为主,偶尔扯扯咸蛋(哈哈~不好好工作又开始发表博客啦~). 由于本人项目经验有限,关于架构设计方面的东西理解有限,我个人对MVVM的理解主要是借鉴于之前的用过的MVC的Web框架~在学校的时候用过ThinkPHP框架,和SSH框架,都是MVC的架构模式,今天MVVM与传统的MVC可谓是极为相似,也可以说是兄弟关系,也就是一家人了. 说到架构设计和团队

iOS开发之int,NSInteger,NSUInteger,NSNumber的使用

1.首先先了解下NSNumber类型: 苹果官方文档地址:https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSNumber_Class/Reference/Reference.html NSNumber是NSValue的一个子类,它是一个对象来存储数字值包括bool型,它提供了一系列的方法来存储char a signed or unsigned char, short

李洪强iOS开发之RunLoop的原理和核心机制

李洪强iOS开发之RunLoop的原理和核心机制 搞iOS之后一直没有深入研究过RunLoop,非常的惭愧.刚好前一阵子负责性能优化项目,需要利用RunLoop做性能优化和性能检测,趁着这个机会深入研究了RunLoop的原理和特性. RunLoop的定义 当有持续的异步任务需求时,我们会创建一个独立的生命周期可控的线程.RunLoop就是控制线程生命周期并接收事件进行处理的机制. RunLoop是iOS事件响应与任务处理最核心的机制,它贯穿iOS整个系统. Foundation: NSRunLo