iOS MD5 和 Base64 算法

一.    MD5加密全称是Message Digest Algorithm 5,翻译为“消息摘要算法第五版”

MD5加密是最长用的加密方式之一,是从一段字符串中通过相应特征生成一段32位的数字字母混合码。对输入信息生成唯一的128位的散列值(32字符)

MD5生成的是固定的128bit,即128个0和1的二进制位,而在实际应用开发中通常是以16进制输出的,所以正好就是32位的16进制,说白了就是32个16进制的数字。

MD5主要特点是不可逆,相同的数据的MD5值肯定一样,不同数据的MD5值不一样(也不是绝对的,但基本是不可能一样的)。

MD5是摘要算法,主要是用来做认证,利用自身优势(不可逆、低碰撞率)解决公开网络中交换密钥、认证的问题,

   MD5相当于超损压缩,在计算过程中原文的部分信息会丢失。

MD5算法还具有以下性质

  • 压缩性:任意长度的数据,算出的MD5值长度都是固定的
  • 用以计算:从原数据计算出MD5值很容易
  • 抗修改性:队员数据进行任何改动,哪怕只修改一个字节,所得到的MD5值都有很大区别。
  • 弱抗碰撞:已知原数据和其MD5值,想找到一个具有相同的MD5值的数据是非常困难的
  • 强抗碰撞;想找到两个不同的数据使他们的MD5值相等是非常困难的

  • MD5加密是不可解密的但是网上有一些解析MD5的,那个相当于一个大型的数据库,通过匹配MD5去找原密码。所以,只要在加密的字符串前面加上一些字母数字符号或者多次MD5加密,这样出来的结果一般是解析不出来的

MD5的应用

由于MD5加密算法具有较好的安全性,而且免费,因此盖加密算法被广泛使用大多数的登录功能向后台提交密码时都会使用到这个算法

注意点:

  1. 一定要和后台开发人员约定好,MD5加密的位数是16位还是32位(大多数都是32位),16位可以通过32的转换得到
  2. MD5加密区分大小写,使用时要和后台约定好

    MD5解密:

    解密网站:http://www.cmd5.com/

  3. 苹果包装了MD5加密的算法,使用起来十分方便,导入头文件 #import<CommonCrypto/CommonDigest.h>  

  4. MD5加密算法

    - (NSString *) md5:(NSString *) input {
    const char *cStr = [input UTF8String];
    unsigned char digest[CC_MD5_DIGEST_LENGTH];
    CC_MD5( cStr, strlen(cStr), digest ); // This is the md5 call
    
    NSMutableString *output = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2];
    
    for(int i = 0; i < CC_MD5_DIGEST_LENGTH; i++)
    [output appendFormat:@"%02x", digest[i]];
    
    return output;
    }
    二.Base64 加密

  1. Base64简单说明 
    描述:Base64可以成为密码学的基石,非常重要 
    特点:可以讲任意的二进制数据进行Base64编码 
    结果:所有的数据都能被编码为并只用65个字符就能表示的文本文件 
    65字符:A~Z a~z 0~9 + / = 
    对文件进行base64编码后文件数据的变化:编码后的数据约等于编码前数据的三分之四,会大三分之一左右
  2. 命令行进行Base64编码和解码 
    编码:base64 123.png -o 123.txt 
    解码:base64 123.txt -o test.png -D
  3. Base64编码原理 
    1)将所有的字符转化为ASCII码; 
    2)将ASCII码转化成8位二进制; 
    3)将二进制3个规程一组(不足三个在后边补0)共24位,再拆分成4组,每组6位; 
    4)统一在6位二进制前补两个0凑足8位; 
    5)将补0后的二进制转换成十进制 
    6)从Base64编码表获取十进制对应的Base64编码;
  4. 处理过程说明 
    a.转换的时候,将三个byte的数据,先后放入一个24bit的缓冲区域,先来的byte占高位。 
    b.数据不足3byte的话,于缓冲区中剩下的bit用0补足。然后,每次取出6个bit,按照其值选择查表选择对应的字符作为编码后的输出。 
    c.不断进行。知道全部输入数据转换完成 
    d.如果最后剩下两个输入数据。在编码结果后加一个“=” 
    e.如果最后剩下一个数据,在编码结果后加2个“=” 
    f.如果没有剩下任何数据,就什么都不要加,这样才可以保资料还原的正确性
  5. iOS实现 
    a. 说明:从iOS7.0开始,苹果就提供了base64的编码和解码支持 ,如果是老项目还能看到Base64编码和解码的第三方框架如果不支持iOS7.0请替换 
    b.相关代码
  6.  字符串进行base64的加解密
//给定一个字符串,对该字符串进行Base64编码,然后返回编码后的结果

    -(NSString *)base64EncodeString:(NSString *)string
    {
        //1.先把字符串转换为二进制数据

        NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];

        //2.对二进制数据进行base64编码,返回编码后的字符串

        return [data base64EncodedStringWithOptions:0];
    }

    //对base64编码后的字符串进行解码

    -(NSString *)base64DecodeString:(NSString *)string

    {

        //1.将base64编码后的字符串『解码』为二进制数据

        NSData *data = [[NSData alloc]initWithBase64EncodedString:string options:0];

        //2.把二进制数据转换为字符串返回

        return [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
    }
7. 对data进行base64的加解密
+ (NSString*)encodeBase64Data:(NSData *)data {  
    data = [GTMBase64 encodeData:data];   
    NSString *base64String = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease];  
    return base64String;  
}  
  
+ (NSString*)decodeBase64Data:(NSData *)data {  
    data = [GTMBase64 decodeData:data];   
    NSString *base64String = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease];  
    return base64String;  
}  




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值