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];
- }
- iOS开发中MD5的精髓
- iOS开发中MD5加密算法的实现
- iOS开发中MD5加密方式
- iOS开发之MD5加密的使用
- iOS开发 MD5加密
- ios开发--MD5加密
- [IOS 开发] MD5加密
- iOS开发 - MD5加密
- IOS中MD5加密算法的实现
- AS中事件的精髓
- iOS中MD5加密
- OS开发中MD5加密算法的实现
- IOS--IOS中MD5加密
- IOS开发中的MD5计算
- iOS开发MD5/SHA1加密算法
- 【iOS开发系列】MD5加密
- iOS开发-基础:MD5加密算法
- iOS开发 md5 简单加密
- [CSS3] 盒模型 & overflow & resize & outline
- leetcode Largest Rectangle in Histogram 代码解析
- memcached---安装、启动和关闭
- 经典CSS实现三角形图标原理解析
- Oracle根据身份证号码判断性别
- iOS开发中MD5的精髓
- Android:进程间通信交互
- 第十五周【项目1 - 验证算法】
- 判断手机号码的正则表达式
- 开发随笔
- asp.net基于Web Service实现远程上传图片的方法
- 矢量室内地图
- Makefile.am几点说明
- kafka zookeeper redis 搭建