加密

作者: 从容到没边的优雅 | 来源:发表于2017-03-08 13:48 被阅读26次

    1: 对称密码算法 ---- AES摘要算法


    分割线


    2:摘要算法
    摘要算法,具有单向不可逆的基本性质,速度快。
    ① 消息摘要算法MD5
    MD5算法将任意明文(不为空)映射位32位字符串。数字签名和复杂的加密系统中都有使用,单独使用由于撞库原因安全性较低。

    • 新建NSString的分类,记得添加加密所需的头文件#import <CommonCrypto/CommonDigest.h> , NSString+MD5.h:
    #import <Foundation/Foundation.h>
    #import <CommonCrypto/CommonDigest.h>
     
    @interface NSString (MD5)
    + (NSString *)md5To32bit:(NSString *)str;
    @end ```
    
    * 编写加密方法:
    
    

    import "NSString+MD5.h"

    @implementation NSString (MD5)

    • (NSString *)md5To32bit:(NSString *)str {
      const char *cStr = [str UTF8String];
      unsigned char digest[CC_MD5_DIGEST_LENGTH];
      CC_MD5( cStr, strlen(cStr),digest );
      NSMutableString *result = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH];
      for(int i = 0; i < CC_MD5_DIGEST_LENGTH; i++)
      [result appendFormat:@"%02x", digest[i]];
      return result;
      }```
    • 使用
    #import "ViewController.h"
    #import "NSString+MD5.h"
     
    @interface ViewController ()
     
    @end
     
    @implementation ViewController
     
    - (void)viewDidLoad {
      [super viewDidLoad];
      
      NSString *name = @"苏庆林";
       
      //加密字符串
      NSString *encypt = [NSString md5To32bit:name];
      NSLog(@"\n name: %@\n encypt: %@",name,encypt);
       // 7f7b7adc32fffe9afcaaefc1d63e8686
    }
    

    ② 安全散列算法 -- SHA (貌似不再安全)

    + (NSString *)SHA1To32bit:(NSString *)str {
      const char *cStr = [str UTF8String];
      unsigned char digest[CC_SHA1_DIGEST_LENGTH];
      CC_SHA1( cStr, strlen(cStr),digest );
      NSMutableString *result = [NSMutableString stringWithCapacity: CC_SHA1_DIGEST_LENGTH];
      for(int i = 0; i < CC_SHA1_DIGEST_LENGTH; i++)
        [result appendFormat:@"%02x", digest[i]];
      return result;
    }```
    
    3、base64  `可逆` `>ios7`
    
    // 加密文本
    NSData *sData = [@"你好China" dataUsingEncoding:NSUTF8StringEncoding];
    NSString *baseStr = [sData base64EncodedStringWithOptions:0];
    
    // 解密文本
    NSData *jimiData = [[NSData alloc]initWithBase64EncodedString:baseStr options:0];   
    NSString *jiemiStr = [[NSString alloc] initWithData:jimiData encoding:NSUTF8StringEncoding];
    
    NSLog(@"加密:%@, 解密:%@", baseStr, jiemiStr); 
    
    ![Snip20170426_1.png](https://img.haomeiwen.com/i2850902/8a26ce91a26c90b0.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    
        /******************-------******************/
        // 图片加密
        NSData *data = [NSData dataWithContentsOfFile:@"/Users/suqinglin/Desktop/timg.jpeg"];
        NSData *base64Data = [data base64EncodedDataWithOptions:0];
        [base64Data writeToFile:@"/Users/suqinglin/Desktop/jiami" atomically:YES];
        // 图片解密
        NSData *baseData = [[NSData alloc] initWithBase64EncodedData:base64Data options:0];
        [baseData writeToFile:@"/Users/suqinglin/Desktop/jiami.jpeg" atomically:YES];
    
    

    相关文章

      网友评论

          本文标题:加密

          本文链接:https://www.haomeiwen.com/subject/fnmpwttx.html