加密

作者: 箫声_筱昇 | 来源:发表于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

相关文章

  • Android数据加密(转)

    Android数据加密之Rsa加密 Android数据加密之Aes加密 Android数据加密之Des加密 And...

  • iOS常见信息加密方式总结

    目录 MD5加密HMAC加密base64加密对称加密RSA加密 - 非对称加密 一.MD5加密 MD5加密是最常用...

  • 加密算法的理解

    加密算法按类型分类: 对称加密、非对称加密、散列算法 对称加密: 加密双方都持有加密算法及密钥 非对称加密: 加密...

  • Web开发必须了解的密码学技术

    对称加密与非对称加密 按照密钥的使用形式,加密算法可以分为对称加密和非对称加密(又叫公钥加密)。对称加密在加密和解...

  • iOS 关于加密

    常见的iOS代码加密常用加密方式包括Base64加密、MD5加密、AES加密、RSA加密等。 Base64加密 B...

  • iOS代码加密常用加密方式

    iOS代码加密常用加密方式,常见的iOS代码加密常用加密方式算法包括MD5加密、AES加密、BASE64加密,三大...

  • iOS常用加密方式

    iOS代码加密常用加密方式,常见的iOS代码加密常用加密方式算法包括MD5加密、AES加密、BASE64加密,三大...

  • 4.加密函数编写

    加密算法分类: md5系列加密 ,哈希算法类型 aes加密对称加密,加密/解密是一个密钥 rsa加密 非对称加密,...

  • 加密算法的应用

    加密算法的应用 [TOC] 加密算法 加密算法主要分为对称加密和非对称加密。 对称加密 对称加密采用了对称密码编码...

  • PHP加密算法

    加密技术的重点是加密算法,加密算法主要分为三类: 对称加密 非对称加密 不可逆加密 对称加密算法 加密过程: 将明...

网友评论

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

本文标题:加密

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