iOS之数据加密

来源:互联网 发布:唱歌培训软件 编辑:程序博客网 时间:2024/05/01 15:53

常用术语

  • 密钥是一种参数,它是在明文转换为密文或将密文转换为明文的算法中输入的参数.(密钥分为对称密钥和非对称密钥,也可以根据途径分为加密密钥和解密密钥)
  • 明文:没有进行加密,能够直接代表原文含义的信息
  • 密文:经过加密处理之后,隐藏原文含义的信息
  • 加密:将明文转换成密文的实施过程
  • 解密:将密文转换成明文的实施过程

数据安全

  • 数据安全:是一种主动的包含措施,数据本身的安全必须基于可靠的加密算法与安全体系,主要是对对称算法与公开密匙密码体系两种(非对称算法),都包含了数据的加密和解密过程
  • 对称算法:对称密码算法有时又叫传统密码算法,是指加密密钥可以从解密密钥中推算出来,反过来也成立
  • 非对称算法:对是指加密密钥可以从解密密钥中推算出来,反过来不能成立
  • 加密算法有很多种,在iOS开发中,常用的有得MD5和base64等等

MD5

  • MD5 Message Digest Algorithm MD5(中文名为消息摘要算法第五版)
  • 应用场景:登陆界面,签名,时间戳等
  • MD5算法具有以下几个提点:

    • 压缩性:任意长度的数据,算出的MD5长度都是固定的(16进制,32位)
    • 容易计算:从源数据计算出MD5值很容易
    • 抗修改性:对源数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别
    • 强抗碰撞:已知源数据和其MD5值,想找到一个具有相同MD5值得数据(即伪造数据)是非常困难的
    • 不可逆性的
  • 具体实现过程:

MD5加密字符串

+ (NSString*)md5String:(NSString*)sourceString {    //由于md5加密都是通过c级别的函数来计算,所以需要将加密的字符串转换为c语言字符串    //1.获取c字符串    const char *cStr = sourceString.UTF8String;    //2.创建一个C语言字符串数组,用来接收加密结束之后的字符串(接收MD5值)    //一个字节是8位,两个字节是16位,两个字符可以表示一个16位进制的数,MD5结果为32,实际上由16位16进制数组成    unsigned char result[CC_MD5_DIGEST_LENGTH];    //3.计算MD5值(结果存储在result数组中)    /*     第一个参数:需要加密的字符串     第二个参数:需要加密的字符串的长度     第三个参数:加密完成之后字符串存储的地方     */    CC_MD5(cStr, (CC_LONG)strlen(cStr), result);    //4.将加密完成的字符拼接起来使用(16进制)    //声明一个可变字符串类型,用来拼接转换好的字符    NSMutableString *resultStr = [[NSMutableString alloc] initWithCapacity:CC_MD5_DIGEST_LENGTH];    for (int i = 0; i < CC_MD5_DIGEST_LENGTH; i++) {        [resultStr appendFormat:@"%02x",result[i]];    }    NSLog(@"%@",resultStr);    return resultStr;}

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);    //结束MD5加密(声明一个无符号的字符数组,用来盛放转换好的数据)    unsigned char result[CC_MD5_DIGEST_LENGTH];    //将数据放入result数组    CC_MD5_Final(result, &md5);    //获取结果(将result中的字符拼接为OC语言中的字符串,以使我们使用)    NSMutableString *resultStr = [[NSMutableString alloc] initWithCapacity:CC_MD5_DIGEST_LENGTH];    for (int i = 0; i < CC_MD5_DIGEST_LENGTH; i++) {        [resultStr appendFormat:@"%02x",result[i]];    }    NSLog(@"%@",resultStr);    return resultStr;}

base64

  • 使用场景:数据(比如网易新闻,资讯类的信息)

base64加密

+ (NSString*)base64EncoderWithData:(NSData*)sourceData {    if(!sourceData) {//如果需要加密的数据为nil,不进行加密,直接返回        return nil;    }    NSString *resultStr = [sourceData base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];//    [sourceData base64EncodedDataWithOptions:NSDataBase64Encoding64CharacterLineLength];返回的是NSData类型    return resultStr;}

base64解密(对于字符串)

+ (id)base64EncoderWithString:(NSString*)sourceString {    if (!sourceString) {        return nil;    }    //解密    NSData *resultData = [[NSData alloc] initWithBase64EncodedString:sourceString options:NSDataBase64DecodingIgnoreUnknownCharacters];    return resultData;}
0 0
原创粉丝点击