加密

作者: 箫声_筱昇 | 来源:发表于2016-05-05 20:23 被阅读77次

    数据安全

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

    密钥

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

    明文与密文

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

    MD5加密

    • 压缩性;具有较好的压缩性,可以压缩任意长度的数据.算出的 MD5值长度都是固定的(16进制,32位);

    • 容易计算;从源数据计算出 MD5值很容易

    • 抗修改性;对源数据进行任何修改,哪怕是只修改1个字节.所得到的 MD5值都有很大的区别;

    • 强抗碰撞;已知源数据和其 MD5值,想找到一个具有相同的 MD5值得数据(即为造数据)是非常困难的.

    • 导入<CommonCrypto/CommonCrypto.h>

    #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
    
    

    相关文章

      网友评论

      • 箫声_筱昇:数据的加密有很多种.通常有MD5/RSA/DES 三种加密方式.一般珠宝类的商家私密性程序要求很高,这是经过多层加密的.即在原先的加密基础上,又进行多次几次加密.我这里只是大概的简述了 MD5的一次性加密.向你所说的那样,珠宝类的私密性高.我的理解是与银行的私密性差不多.你可以先讲私密性的重要性.在讲为什么需要私密性,使用这样的方法对本公司有什么重要性.在对私密性程序进行稍微详细的讲解
      • overla5:您好。我最近在找工作。明天有一家面试,珠宝类的。要求私密性程序私密性高。我是一个小白,没有什么经验。想问您一下,私密性从哪方面说?或者做。

      本文标题:加密

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