一、MD5定义    
MD5即Message-Digest Algorithm 5(消息-摘要算法5),为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护(又译摘要算法、哈希算法),主流编程语言普遍已有MD5实现。将数据运算为另一固定长度值,是杂凑算法的基础原理,MD5的前身有MD2、MD3和MD4。
也有说法MD5不是加密算法, 因为如果目的是加密,必须满足的一个条件是加密过后可以解密。但是MD5是无法从结果还原出原始数据的。
二、MD5特点
1、压缩性:任意长度的数据,算出的MD5值长度都是固定的。
2、容易计算:从原数据计算出MD5值很容易。
3、抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。
4、弱抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。
5、强抗碰撞:想找到两个不同的数据,使它们具有相同的MD5值,是非常困难的。
6、MD5加密是不可解密的,但是网上有一些解析MD5的,那个相当于一个大型的数据库,通过匹配MD5去找到原密码。所以,只要在要加密的字符串前面加上一些字母数字符号或者多次MD5加密,这样出来的结果一般是解析不出来的。
三、MD5好处
1、压缩到固定长度128bit,长度小适合互联网传输;
2、相同文件多次压缩的值不变,常用于对文件的是否被篡改的校验;
3、不同文件压缩后出现值冲突的几率很小;
4、md5算法比同类的sha-1计算速度快;
四、MD5应用
1、一致性验证:MD5的典型应用是对一段信息(Message)产生信息摘要(Message-Digest),以防止被篡改。MD5就可以为任何文件(不管其大小、格式、数量)产生一个同样独一无二的“数字指纹”,如果任何人对文件做了任何改动,其MD5值也就是对应的“数字指纹”都会发生变化。
2、数字签名:MD5的典型应用是对一段Message(字节串)产生fingerprint(指纹),以防止被“篡改”。举个例子,你将一段话写在一个叫 readme.txt文件中,并对这个readme.txt产生一个MD5的值并记录在案,然后你可以传播这个文件给别人,别人如果修改了文件中的任何内容,你对这个文件重新计算MD5时就会发现(两个MD5值不相同)。如果再有一个第三方的认证机构,用MD5还可以防止文件作者的“抵赖”,这就是所谓的数字签名应用。
3、安全访问认证:MD5还广泛用于操作系统的登陆认证上,如Unix、各类BSD系统登录密码、数字签名等诸多方面。如在Unix系统中用户的密码是以MD5(或其它类似的算法)经Hash运算后存储在文件系统中。当用户登录的时候,系统把用户输入的密码进行MD5 Hash运算,然后再去和保存在文件系统中的MD5值进行比较,进而确定输入的密码是否正确。通过这样的步骤,系统在并不知道用户密码的明码的情况下就可以确定用户登录系统的合法性。这可以避免用户的密码被具有系统管理员权限的用户知道。
移动端多用于
1、本地数据加密:对NSUserDefaults,qlite,存储文件数据加密,保护帐号和关键信息。
2、URL编码加密:对程序中出现的URL进行编码加密,防止URL被静态分析
3、网络传输数据加密:对客户端传输数据提供加密方案,有效防止通过网络接口的拦截获取
4、方法体,方法名高级混淆:对应用程序的方法名和方法体进行混淆,保证源码被逆向后无法解析代码
5、程序结构混排加密:对应用程序逻辑结构进行打乱混排,保证源码可读性降到最低
code:
- (NSString *)md5String {const char *str = self.UTF8String;  // 转为utf-8uint8_t buffer[CC_MD5_DIGEST_LENGTH];  //开辟一个16字节(128位:md5加密出来就是128位/bit)的空间(一个字节=8字位=8个二进制数)// 把str字符串转换成了32位的16进制数列(这个过程不可逆转) 存储到了result这个空间中CC_MD5(str, (CC_LONG)strlen(str), buffer);NSMutableString *output = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2];for (int i = 0; i < CC_MD5_DIGEST_LENGTH; i++) {[output appendFormat:@"%02x", buffer[i]];}return output;
}

使用:
对于需要加密的内容可以进行多次MD5加密或者加盐,增加安全性。
NSString *pwd = @"123457";
NSString *md5Str = [pwd md5String];
NSLog(@"%@", md5Str);// 多次加密
NSString *md5Str2 = [[pwd md5String] md5String];// 加盐
NSString *md5Str2 = [[NSString stringWithFormat:@"ww%@ee123", pwd] md5String];

可能会有人遇到过ios客户端和服务器端匹配MD5值会有不一样的,可能是某一方求MD5值少做一步,或者大小写位数没有约定好。

参考:http://baike.baidu.com/link?url=FII-wKl06KB_vzlHR7DdIyyXXYvhHIMnmn_jsF9kAtEXBOFVAW3rBnBwsLESHpawoHDp7r8WLXDhlqBvdNK_Wa

转载于:https://www.cnblogs.com/10-19-92/p/6750280.html

iOS MD5 (消息摘要算法5)相关推荐

  1. 【转】使用C语言实现MD5消息摘要算法

    md5.h文件 // // Created by Alex on 2015/11/24. // #ifndef CLION_WORK_MD5_H #define CLION_WORK_MD5_Htyp ...

  2. md5不是对称密码算法_密码学中的消息摘要算法5(MD5)

    md5不是对称密码算法 In cryptography, MD5 (Message-Digest algorithm 5) is a mainly used cryptographic hash fu ...

  3. aes算法实现c语言_消息摘要算法MD5图解及C语言实现

    前言 最近看了很多关于消息摘要算法这方面的资料,既有CSDN上面各路大神写的文章,也有这些算法的标准文档.有的讲的比较啰嗦,有的给出来的代码是直接调库的.我想写一篇文章,帮助自己理清思路,利用图解简明 ...

  4. Java常用消息摘要算法-MD5

    本工具类可实现对字符串或者文件提取MD5值(MD5加密) import java.io.File; import java.io.FileInputStream; import java.io.Inp ...

  5. 消息摘要算法示例(python和go)

    常用的消息摘要算法有MD5和SHA,这些算法在python和go的库中都有,需要时候调用下就OK了,这里总结下python和go的实现. 一.python消息摘要示例 代码如下: #! /usr/bi ...

  6. html数据摘要算法,Hash函数和消息摘要算法(示例代码)

    一.Hash函数 哈希函数就是能将任意长度的数据映射为固定长度的数据的函数.哈希函数返回的值被叫做哈希值.哈希码.散列,或者直接叫做哈希. 二.消息摘要 将长度不固定的消息(message)作为输入参 ...

  7. 常用的消息摘要算法小总结

    今天偶然的学习了一下几种关于消息摘要算法的知识.个人觉得很好.应着老话"好记性不如烂笔头",我就码了几行代码咯. 算法嘛,没什么好说的了.毕竟是设计者智慧与汗水的结晶,也是时代进步 ...

  8. 分布式服务器框架之Servers.Core库实现 DES对称加密算法;SHA1信息摘要算法;MD5信息摘要算法

    1 介绍 1.1 DES对称加密算法介绍 对称加密算法 通信双方(通信主体)同时掌握一个钥匙,加解密都由这一个钥匙完成.通信双方通信前共同拟定一个密钥,不向第三方公开,发送前加密和接受后解密都由此密钥 ...

  9. 使用消息摘要算法提升密码安全性

    使用消息摘要算法提升密码安全性 前言 消息摘要算法 摘要碰撞概率 消息摘要算法的破解 解决方案 前言 密码安全往往与账户安全息息相关.密码技术是保护信息安全最基础.最核心的手段之一.它不仅具有信息加密 ...

最新文章

  1. 【laravel7.x中文文档】Redis
  2. vs2008安装部署软件过程
  3. wiki-editor语法
  4. Python 奇淫技巧!
  5. (四)Qt实现自定义模型基于QAbstractTableModel (一般)
  6. 近期计算机视觉算法竞赛汇总—总奖池超300万人民币
  7. 我正在参加年度博客之星评选,请大家访问活动页面,帮我投票打分
  8. 细说CSS的transform
  9. centos报acpi 错误解决方法实测有用
  10. mysql开发与运维_专业的MySQL开发规范
  11. STM32F407的外部中断设置_RCC_APB2PeriphClockCmd_RCC_APB2Periph_SYSCFG
  12. QQ机器人 微信机器人最新可用框架汇总
  13. 项目组织战略管理及组织结构
  14. 微信云函数的使用步骤
  15. 3-4 harbor 2.6.2 的安装使用及高可用方案
  16. 2008最火爆的十大网络流行语:
  17. 【12.3】call_soon、call_at、call_later、call_soon_threadsafe
  18. 【Kaldi 新手入门】手把手教你搭建简易英文数字ASR系统
  19. Unity TilePalette中素材图片与Tile里Cell大小关系
  20. 程序员的《致女儿书》

热门文章

  1. 南邮 计算机网络,南邮计算机网络_期末复习纲要-精简版教材.pdf
  2. three.js两个点给线条加宽度_一台电视两个房间看?衣柜、客房会隐形?这是什么神奇设计!...
  3. 同方知网软件_国产精品软件天若OCR:支持图像识别/自动翻译/公式识别等
  4. 数据库 数据库SQL语句五
  5. java httpclient发送json 请求 ,go服务端接收
  6. posix thread线程
  7. Python:IndentationError: unexpected indent
  8. 第二次北京之行-游颐和园
  9. Java单例模式简单实现
  10. 程序编译时书写Makefile注意事项一例