我的ios进阶编程学习

加密

2016-05-05  本文已影响77人  箫声_筱昇

数据安全

  • 在互联网发展趋势迅猛的今天,数据安全的重要性日趋凸显.页成为我们必须了解的互联网知识.是一种主动的包含措施,数据本事有对称算法与公开密钥密码体系两种(非对称算法),都包含了数据的加密和解密的过程.

密钥

密钥是一种参数,它是在明文转换为密文或将密文转成为明文的算法中输入的参数.密钥分为对称密钥和非对称密钥(也可以根据用途来分为加密密钥和解密密钥)

明文与密文

没有进行加密,能够直接代表原文含义的信息
经过加密处理之后,隐藏原文含义的信息

MD5加密

#import "RootViewController.h"
#import <CommonCrypto/CommonCrypto.h>
#import "MySecurity.h"
- (void)viewDidLoad {
    [super viewDidLoad];
    
    //MD5:1加密不可逆;2是将任意长度的数据,算出的 MD5值长度都是固定的.
    //使用场景:一般用在用户名登录注册的时候. 在参数低下的签名. sign.
    //更安全:1,加盐加密.2,先加密,在打乱顺序.
    //将图片转化为 NSData 类型
    
    NSData *Data = UIImageJPEGRepresentation([UIImage imageNamed:@"6.jpg"], 1.0);
    NSString *str = [MySecurity base64EncoderWithData:Data];
    NSLog(@"%@",str);
    
    
    NSData *data = [MySecurity base64DecoderWithString:str];
    UIImageView *imageView = [[UIImageView alloc] initWithFrame:self.view.bounds];
    imageView.image = [UIImage imageWithData:data];
    [self.view addSubview:imageView];
    
    //base64加密.例如网易新闻.
    //是可逆的.  
}

#pragma mark-----加密
- (void)MD5String:(NSString *)sourceString{
    const char *cstr = sourceString.UTF8String;//由于 md5加密都是通过 c级别的函数来计算.所以需要将加密的字符串转换类型为 c 语言字符串
    //创建一个 C 语言的字符数组.用来接收加密结束之后的字符
    unsigned char result[CC_MD5_DIGEST_LENGTH];
    //MD5计算(加密);
    //第一个参数:需要加密的字符串
    //第二个参数:需要加密的字符串的长度
    //第三个参数:加密完成之后的字符串存储的地方/
    CC_MD5(cstr, (CC_LONG)strlen(cstr), result);
    //将加密完成的字符拼接起来使用(16进制的).
    
    //声明一个可变类型.用来拼接转换好的字符
    NSMutableString *resultStr = [[NSMutableString alloc] init];
    //遍历数组.取出所有的字符来拼接.
    for (int i = 0; i < CC_MD5_DIGEST_LENGTH; i++) {
        [resultStr appendFormat:@"%02x", result[i]];//02x 16进制.位置不够的时候.用0来补齐.
    }
    //打印最终需要的字符.
    NSLog(@"resultStr====%@",resultStr);
}
#pragma mark-----MD5对 data 类型数据加密
- (void)MD5Data:(NSData *)sourceData{
//需要 MD5变量,并且进行初始化
    CC_MD5_CTX MD5;
    CC_MD5_Init(&MD5);//初始化地址
    //开始MD5加密
    //第一个参数:对 MD5变量取地址(要为该变量指向的内存空间存储计算好的数据)
    //第二个参数:需要计算的源数据
    //第三个参数:源数据的长度.
    CC_MD5_Update(&MD5, sourceData.bytes, (CC_LONG)sourceData.length);
    //声明一个无符号的字符数组.用来存放转换好的数据
    unsigned char result[CC_MD5_DIGEST_LENGTH];
    CC_MD5_Final(result, &MD5);//将数据放入result数组
    //拼接:将 result 中的字符拼接为 OC 语言中的字符串,以便我们使用
    NSMutableString *resultStr = [[NSMutableString alloc] init];
    for (int i = 0; i < CC_MD5_DIGEST_LENGTH; i++) {
        [resultStr appendFormat:@"%02X",result[i]];
    }
    
    NSLog(@"%@",resultStr);
}
#import <Foundation/Foundation.h>

@interface MySecurity : NSObject

+ (NSString *)MD5String:(NSString *)sourceString;//对 NSString类型进行 MD5加密

+ (NSString *)MD5Data:(NSData *)sourceData;//对 NSData 类型进行 MD5加密

+ (NSString *)base64EncoderWithData:(NSData *)sourceData;//base64加密

+ (id)base64DecoderWithString:(NSString *)sourceString;//base解密
@end
#import "MySecurity.h"
#import <CommonCrypto/CommonCrypto.h>


@implementation MySecurity

#pragma mark-----加密
+ (NSString *)MD5String:(NSString *)sourceString{
    const char *cstr = sourceString.UTF8String;//由于 md5加密都是通过 c级别的函数来计算.所以需要将加密的字符串转换类型为 c 语言字符串
    //创建一个 C 语言的字符数组.用来接收加密结束之后的字符
    unsigned char result[CC_MD5_DIGEST_LENGTH];
    //MD5计算(加密);
    //第一个参数:需要加密的字符串
    //第二个参数:需要加密的字符串的长度
    //第三个参数:加密完成之后的字符串存储的地方/
    CC_MD5(cstr, (CC_LONG)strlen(cstr), result);
    //将加密完成的字符拼接起来使用(16进制的).
    
    //声明一个可变类型.用来拼接转换好的字符
    NSMutableString *resultStr = [[NSMutableString alloc] init];
    //遍历数组.取出所有的字符来拼接.
    for (int i = 0; i < CC_MD5_DIGEST_LENGTH; i++) {
        [resultStr appendFormat:@"%02x", result[i]];//02x 16进制.位置不够的时候.用0来补齐.
    }
    //打印最终需要的字符.
    NSLog(@"resultStr====%@",resultStr);
    return resultStr;
}


#pragma mark-----MD5对 data 类型数据加密
+ (NSString *)MD5Data:(NSData *)sourceData{
    //需要 MD5变量,并且进行初始化
    CC_MD5_CTX MD5;
    CC_MD5_Init(&MD5);//初始化地址
    //开始MD5加密
    //第一个参数:对 MD5变量取地址(要为该变量指向的内存空间存储计算好的数据)
    //第二个参数:需要计算的源数据
    //第三个参数:源数据的长度.
    CC_MD5_Update(&MD5, sourceData.bytes, (CC_LONG)sourceData.length);
    //声明一个无符号的字符数组.用来存放转换好的数据
    unsigned char result[CC_MD5_DIGEST_LENGTH];
    CC_MD5_Final(result, &MD5);//将数据放入result数组
    //拼接:将 result 中的字符拼接为 OC 语言中的字符串,以便我们使用
    NSMutableString *resultStr = [[NSMutableString alloc] init];
    for (int i = 0; i < CC_MD5_DIGEST_LENGTH; i++) {
        [resultStr appendFormat:@"%02X",result[i]];
    }
    
    NSLog(@"%@",resultStr);
    return resultStr;
}
#pragma mark-----base64加密
+ (NSString *)base64EncoderWithData:(NSData *)sourceData{
    NSString *resultStr = [sourceData base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];//返回值为 string 类型;
//    [sourceData base64EncodedDataWithOptions:<#(NSDataBase64EncodingOptions)#>];//返回值为 NSData 类型.
    if (!sourceData) {//如果加密的数据为 nil.不进行加密.直接返回/
        return nil;
    }
    
    return resultStr;
}
#pragma mark-----base64解密
+ (id)base64DecoderWithString:(NSString *)sourceString{
    if (!sourceString) {
        return nil;
    }
    //解密
    NSData *resultData = [[NSData alloc] initWithBase64EncodedString:sourceString options:NSDataBase64DecodingIgnoreUnknownCharacters];
    return resultData;
}



@end

上一篇 下一篇

猜你喜欢

热点阅读