Skip to content

gdis5251/MD5

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MD5

什么是 MD5?

MD5是由Ron Rivest在1991设计的一种信息摘要(message-digest )算法,当给定任意长度的信息,MD5会产生一个 固定的128位“指纹”或者叫信息摘要。从理论的角度,所有的信息产生的MD5值都不同,也无法通过给定的MD5值产 生任何信息,即不可逆。

环境

  • 编程语言:C++
  • 开发平台:Linux CentOS 7.0
  • 开发工具:vim 代码编辑器,gcc 编译器,makefile 工程管理工具,gdb 调试器

MD5 有什么用?

我在刚知道 MD5 是在学习 TCP/UDP 的时候,当时他们的报头里有一个校验和的信息。经过我的查询他们采用的是 CRC 校验和,CRC 校验和才用的是补码相加的方式来验证,那么它就存在一个问题,就是当相加到溢出的时候,CRC 校验和不会停止,而是会继续相加,这就有可能导致两个字符串明明不相同,他们的 CRC 可能一样。

然后经过我的查询,得知了有 MD5 的方式来计算校验和,MD5 输入任意长度的信息,经过处理,会得到一个 128 位的信息。这个过程是不可逆的。就算两个字符串仅仅相差一个字符,他们得到的 MD5 的差别还是非常大的。

应用场景:

  1. 电子邮件、文件下载.... 验证一致性。
  2. 防止密码明文。

MD5 的计算步骤:

MD5 的计算主要是填充最后一块数据。

填充比特位

当程序读取到最后一块数据时(长度小于 64 字节的数据):

  • 如果 len = 64 - read_len < 56 个字节
    • 先给接下来的一个字节填充 0x80 就是第一位为1,其余都为0。
    • 然后一直补 0 直到剩余的字节为 8 个字节。
    • 将整个字符串的长度(包括之前计算过的)放到后 8 个字节里。
    • 计算
  • 如果 len = 64 - read_len >= 56
    • 先给接下来的一个字节填充 0x80 就是第一位为1,其余都为0。
    • 然后一直补 0 到末尾。
    • 再生成一个字符串初始化全部为0 。
    • 在这个字符串的后 8 个字节填整个字符串的长度。
    • 计算

所有的步骤都是发明者规定好的,跟着文档看就行。

RFC 1321

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published