MD5的介绍

MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法),主流编程语言普遍已有MD5实现。将数据(如汉字)运算为另一固定长度值,是杂凑算法的基础原理,MD5的前身有MD2、MD3和MD4。

MD5算法的特点

1.压缩性:任意长度的数据,算出的MD5值的长度都是固定的

2.容易计算:从原数据计算出MD5值很容易

3.抗修改性:对原数据进行任何改动,修改一个字节生成的MD5值区别也会很大

4.强抗碰撞:已知原数据和MD5,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。

MD5的作用:

MD5的作用是让大容量信息在用数字签名软件签署私人密钥前被"压缩"成一种保密的格式(就是把一个任意长度的字节串变换成一定长的十六进制数字串)。

MD5的算法原理:

MD5以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值;

/*
MD5代码实现原理
@implementation NSString (Encryption)

  • (NSString *)md5String{
    //先转为UTF_8编码的字符串
    const char* str = [self UTF8String];
    //设置一个接受字符数组
    //md5加密后是128bit, 16 字节 * 8位/字节 = 128 位
    unsigned char result[CC_MD5_DIGEST_LENGTH];
    /*

    extern unsigned char *CC_MD5(const void *data, CC_LONG len, unsigned char *md)官方封装好的加密方法把str字符串转换成了32位的16进制数列(这个过程不可逆转) 存储到了result这个空间中
    */

    CC_MD5(str, strlen(str), result);

    NSMutableString ret = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH 2];
    /*

    x表示十六进制,%02X  意思是不足两位将用0补齐,如果多余两位则不影响
    NSLog("%02X", 0x888);  //888
    NSLog("%02X", 0x4); //04
    */

    //将16字节的16进制转成32字节的16进制字符串
    for(int i = 0; i<CC_MD5_DIGEST_LENGTH; i++) {

       [ret appendFormat:@"%02x",result[i]];

    }
    return ret;
    }

*/

SHA-1的介绍:

SHA是美国国家安全局设计的,由美国国家标准和技术研究院发布的一系列密码散列函数。

1.SHA1算法简介

安全哈希算法(Secure Hash Algorithm)主要适用于数字签名标准(Digital Signature Standard DSS)里面定义的数字签名算法(Digital Signature Algorithm DSA)。对于长度小于2^64位的消息,SHA1会产生一个160位的消息摘要。当接收到消息的时候,这个消息摘要可以用来验证数据的完整性。在传输的过程中,数据很可能会发生变化,那么这时候就会产生不同的消息摘要。

最初载明的算法于1993年发布,称做安全散列标准 (Secure Hash Standard),FIPS PUB 180。这个版本常被称为 "SHA-0"。它在发布之后很快就被NSA撤回,并且以 1995年发布的修订版本 FIPS PUB 180-1 (通常称为 "SHA-1") 取代。根据 NSA的说法,它修正了一个在原始算法中会降低密码安全性的错误。然而 NSA 并没有提供任何进一步的解释或证明该错误已被修正。1998年,在一次对 SHA-0 的攻击中发现这次攻击并不能适用于 SHA-1 — 我们不知道这是否就是NSA 所发现的错误,但这或许暗示我们这次修正已经提升了安全性。SHA-1已经被公众密码社群做了非常严密的检验而还没发现到有不安全的地方,它被认为是安全的。

SHA1有如下特性:不可以从消息摘要中复原信息;两个不同的消息不会产生同样的消息摘要。

SHA-0和SHA-1会从一个最大2^64 位元的讯息中产生一串160位元的摘要,然后以设计MD4及MD5讯息摘要算法的MIT教授Ronald L. Rivest类似的原理为基础来加密。

3 SHA1算法描述

在SHA1算法中,我们必须把原始消息(字符串,文件等)转换成位字符串。SHA1算法只接受位作为输入。假设我们对字符串“abc”产生消息摘要。首先,我们将它转换成位字符串如下:01100001 01100010 01100011 ‘a’=97 ‘b’=98 ‘c’=99 这个位字符串的长度为24

MD5和SHA—1的区别

3.1 MD5与SHA-1的比较

由于MD5与SHA-1均是从MD4发展而来,它们的结构和强度等特性有很多相似之处,表(1)是对MD5与SHA-1的结构比较。SHA-1与MD5的最大区别在于其摘要比MD5摘要长32 比特。对于强行攻击,产生任何一个报文使之摘要等于给定报文摘要的难度:MD5是2128数量级的操作,SHA-1是2160数量级的操作。产生具有相同摘要的两个报文的难度:MD5是264是数量级的操作,SHA-1 是280数量级的操作。因而,SHA-1对强行攻击的强度更大。但由于SHA-1的循环步骤比MD5多80:64且要处理的缓存大160比特:128比特,SHA-1的运行速度比MD5慢。

2SHA1和MD5的算法说明

SHA1和MD5的算法都是从MD4算法改进而来的2种算法,基本思路都是将信息分成N个分组,每组64个字节,每个分组都进行摘要运算。当一个分组的摘要运算完毕后,将上一个分组的结果也用于下一个分组的运算。

信息的长度(注意是bit位长度,不是字节长度)用64位表示,也要参加信息摘要运算,而且是放在最后一个分组的末尾,所以长度信息要占据8个字节。

如果信息数据最后一个分组长度小于64个字节,在后面添加0x80标志结束,如果此时数据+结束标志已经<=56个字节,还可以放入长度数据,就在结束标志到第56个字节补0,然后放入长度,如果此时信息数据+结束标志已经大于56字节,那么这个分组后面补0,进行一次摘要运算,然后再建立一个分组,前面全部补0,最后16个字节放长度,再进行一次摘要。

需要注意的地方如下。

MD5最后生成的摘要信息是16个字节,SHA1是20个字节。

MD5和SHA1的分组信息运算,分组里面的的数据都会被视为16个DWORD,而MD5算法认为这些DWORD的字节序列是LITTLE-ENDIAN,而SHA1的算法认为DWORD是BIG-ENDIAN的。所以在不同字节序的主机上要进行转换。放入最后一个分组的长度信息,是原始数据长度,而且是BIT位长度,其是一个uint64_t,而MD5算法要求放入的长度是LITTLE-ENDIAN的,而SHA1算法则要求这个长度是BIG-ENDIAN的。不同的平台要进行转换。

/*
SHA1加密方式代码实现原理

  • (NSString*) sha1  
    {  
    const charchar *cstr = [self cStringUsingEncoding:NSUTF8StringEncoding];  
    NSData *data = [NSData dataWithBytes:cstr length:self.length];

    uint8_t digest[CC_SHA1_DIGEST_LENGTH];

    CC_SHA1(data.bytes, data.length, digest);

    NSMutableString output = [NSMutableString stringWithCapacity:CC_SHA1_DIGEST_LENGTH 2];

    for(int i = 0; i < CC_SHA1_DIGEST_LENGTH; i++)

       [output appendFormat:@"%02x", digest[i]];
    

    return output;  
    }

*/

关于MD5和SHA-1的简单的介绍相关推荐

  1. 常用加密算法的Java实现(一) ——单向加密算法MD5和SHA

    1.Java的安全体系架构 1.1           Java的安全体系架构介绍 Java中为安全框架提供类和接口.JDK 安全 API 是 Java 编程语言的核心 API,位于 java.sec ...

  2. 简要介绍BASE64、MD5、SHA、HMAC几种方法。

    加密解密,曾经是我一个毕业设计的重要组件.在工作了多年以后回想当时那个加密.解密算法,实在是太单纯了.     言归正传,这里我们主要描述Java已经实现的一些加密解密算法,最后介绍数字证书.     ...

  3. 用Python中的hashlib实现md5和sha加密

    文章目录 一.用 pandas 读取 Excel 数据 二.加密库 hashlib 三. pandas中的 map() 方法 四.数据加密工具 本文分享知识: pandas读取Excel数据 read ...

  4. AES、DES、RSA、base64、MD5、SHA加密

    对称加密: 需要对加密和解密使用相同密钥的加密算法.由于其速度快,对称性加密通常在消息发送方需要加密大量数据时使用.对称性加密也称为密钥加密. 所谓对称,就是采用这种加密方法的双方使用方式用同样的密钥 ...

  5. java messagedigest_Java 自带的加密类MessageDigest类(加密MD5和SHA)

    转载 转载自:http://www.tuicool.com/articles/nMNVVj Java 自带的数据加密类MessageDigest(MD5或SHA加密) 说明: 在网站中,为了保护网站会 ...

  6. 深入了解MD4,MD5,SHA哈希密码算法与破解技术

    简介 密码(password)是最广泛使用的认证系统之一,防止未经授权的用户访问系统,无论是离线还是在线.在大多数系统中,密码是通过加密存储的,以便为每个用户提供安全性.然而,在这些密码的加密之内,仍 ...

  7. JavaScript实现在线MD5、SHA、AES、Rabit 、RC4、TripleDES Ripemd160 加密解密工具-toolfk程序员在线工具网...

    2019独角兽企业重金招聘Python工程师标准>>> 本文要推荐的[ToolFk]是一款程序员经常使用的线上免费测试工具箱,ToolFk 特色是专注于程序员日常的开发工具,不用安装 ...

  8. MD5和SHA加密实现

    @Testpublic void TestMD5AndSHA() throws NoSuchAlgorithmException {String MD5=Md5("123456") ...

  9. 消息摘要的编程使用(MD5、SHA、HMAC)

    消息摘要的概念: 唯一对应一个消息或文本的固定长度的值,由一个单向Hash加密函数对消息进行作用而产生 消息摘要的分类: (1)MD(Message Digest):消息摘要算法 (2)SHA(Sec ...

  10. md5和SHA校验码

    md5已经不安全了,中国山东大学女学霸王小云破解了一系列密码,当真是巾帼不让须眉.说是破解,其实就是给你一个md5码,让你求出这个md5码所对应的原始信息,显然一个md5对应无数种原始信息.而md5的 ...

最新文章

  1. PMP-【第1章 引论】-2020-12-29(25页-34页)
  2. Android单元測试之JUnit
  3. C++Pigeonhole sort鸽巢排序的实现算法(附完整源码)
  4. Android应用自动更新功能的代码实现
  5. 据库中事务、会话、线程这几个概念是什么关系
  6. python list转dict
  7. 良好的树结构设计会让开发更舒爽
  8. Windows核心编程_inlineHook
  9. Java面试题2.0--solr
  10. 微信java版s40_塞班微信S40版下载 v1.0 Beta-symbian微信S40版-pc6下载站
  11. 给《人人都是产品经理》的一封信
  12. 算法之寻找完数(C语言)
  13. 如何让你的跑步能力变的更强大!
  14. Android实现Twitter登录分享
  15. 拯救者笔记本ubuntu亮度调节
  16. 微信小程序外卖平台,免费下载小程序外卖源代码
  17. Chrome安装VUE插件
  18. 按快捷键进不去bios问题解决
  19. 计算机启动后桌面上什么都没有,电脑开机后,桌面上什么都没有了?我怎么处理?好着急啊...
  20. 基于xilinx fpga的ofdm通信系统基带设计_基于嵌入式Wi-Fi处理器的无线系统设计...

热门文章

  1. SpringBoot2 hikari 关于 Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl处理
  2. 用Java实现简单的语音朗读
  3. 领略千变万化的Android Drawable (一)
  4. 多远线性回归代码-波士顿房价问题
  5. MySql.Data.dll 适配.NET 4.0的版本免费下载) 网上找了很久都是要收费的,最后github下载的,链接如下: https://github.com/BingFengHung/MyS
  6. 用ChatGPT创建虚拟小镇,或许《西部世界》已经成为现实
  7. 线性表-链式存储结构
  8. 物联网(AIOT产业)应用简介
  9. 小学生用计算机来计算可以吗,餐桌上关于小学生是否可以使用计算器的争论
  10. 都是熟人!白玉无冰再度领衔,下周广州见丨Cocos Star Meetings