iOS开发中MD5加密算法的实现

来源:互联网 发布:lofter个性域名怎么弄 编辑:程序博客网 时间:2024/05/29 16:47
一、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?在CODE上查看代码片派生到我的代码片
  1. - (NSString *)md5HexDigest:(NSString *)url  
  2. {  
  3.     const char *original_str = [url UTF8String];  
  4.     unsigned char result[CC_MD5_DIGEST_LENGTH];  
  5.     CC_MD5(original_str, strlen(original_str), result);  
  6.     NSMutableString *hash = [NSMutableString string];  
  7.     for (int i = 0; i < 16; i++)  
  8.         [hash appendFormat:@"%02X", result[i]];  
  9.     return [hash lowercaseString];  
  10. }