iOS开发中MD5的精髓

来源:互联网 发布:戏子当道知乎 编辑:程序博客网 时间:2024/05/22 05:05

一、MD5算法简介

         MD5的全称是Message Digest Algorithm 5(消息摘要算法第五版),是计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。在90年代初由MIT Laboratory for Computer Science 和RSA Data Security Inc的Ronald L.Rivest开发,经MD2、MD3和MD4发展而来。Message-Digest泛指字节串(Message)的Hash变换,就是把一个任意长度的字节串变换成一定长的大整数。请注意我使用了“字节串”而不是“字符串”这个词,是因为这种变换只与字节的值有关,与字符集或编码方式无关。 

        MD5将任意长度的“字节串”变换成一个128bit的大整数,并且它是一个不可逆的字符串变换算法,换句话说就是,即使你看到源程序和算法描述,也无法将一个MD5的值变换回原始的字符串,从数学原理上说,是因为原始的字符串有无穷多个,这有点象不存在反函数的数学函数。

        然而虽然MD5属于单向加密的加密算法,但通过一些方法仍然能进行破解。2004年8月17日的美国加州圣巴巴拉的国际密码学会议(Crypto’2004)上,来自中国山东大学的王小云教授做了破译MD5、HAVAL-128、 MD4和RIPEMD算法的报告,公布了MD系列算法的破解结果。宣告了固若金汤的世界通行密码标准MD5的堡垒轰然倒塌,引发了密码学界的轩然大波。(注意:并非是真正的破解,只是加速了杂凑冲撞)

        MD5的典型应用是对一段Message(字节串)产生fingerprint(指纹),以防止被“篡改”。举个例子,你将一段话写在一个叫readme.txt文件中,并对这个readme.txt产生一个MD5的值并记录在案,然后你可以传播这个文件给别人,别人如果修改了文件中的任何内容,你对这个文件重新计算MD5时就会发现(两个MD5值不相同)。如果再有一个第三方的认证机构,用MD5还可以防止文件作者的“抵赖”,这就是所谓的数字签名应用。 

MD5还广泛用于加密和解密技术上,在很多操作系统中,用户的密码是以MD5值(或类似的其它算法)的方式保存的, 用户Login的时候,系统是把用户输入的密码计算成MD5值,然后再去和系统中保存的MD5值进行比较,而系统并不“知道”用户的密码是什么。

二、MD5算法实现


在iOS开发中,如果某个字符串需要进行MD5加密,则按如下方法即可实现需求:

1、包含头文件“CommonDigest.h

        #import<CommonCrypto/CommonDigest.h>

         2、编写下述方法。函数参数为需要加密的字符串,返回值为加密后得到的结果,也是一个字符串。


[objc] view plaincopyprint?


  • - (NSString *)md5HexDigest:(NSString *)url  
  • {  
  •     const char *original_str = [url UTF8String];  
  •     unsigned char result[CC_MD5_DIGEST_LENGTH];  
  •     CC_MD5(original_str, strlen(original_str), result);  
  •     NSMutableString *hash = [NSMutableString string];  
  •     for (int i = 0; i < 16; i++)  
  •         [hash appendFormat:@"%02X", result[i]];  
  •     return [hash lowercaseString];  
  • }  
0 0
原创粉丝点击