MD5简单了解

什么是 MD5

MD5 是 Message-Digest algorithm 5(信息-摘要算法)的缩写,被广泛用于加密和解密技术上,它可以说是文件的“数字指纹”。任何一个文件,无论是可执行程序、图像文件、临时文件或者其他任何类型的文件,也不管它体积多大,都有且只有一个独一无二的MD5信息值,并且如果这个文件被修改过,它的MD5值也将随之改变。因此,我们可以通过对比同一文件的MD5值,来校验这个文件是否被“篡改”过。

MD5 用途

MD5 文件传输

当我们下载了一个软件以后,如果想知道下载的这个软件和网站的原始文件是否一模一样,就可以给自己下载的文件做个 MD5 校验。如果得到的 MD5 值和网站公布的相同,可确认所下载的文件是完整的。如有不同,说明你下载的文件是不完整的:要么就是在网络下载的过程中出现错误,要么就是此文件已被别人修改。为防止他人更改该文件时放入病毒,最好不要使用。一般使用 MD5 计算工具计算后,和软件网站公布得MD5码进行比对。

校验值是一组16进制数,不区分大小写,校验值本身只与文件内容有关,只要文件内容不改变校验值就不变;如复制/剪切/粘贴,修改文件创建时间/访问时间,修改文件读/写/执行属性等操作都不会导致校验值发生改变。

MD5 密码加密

MD5 算法是不可逆的,可以应用在对密码(或者信用卡等)得加密,加密之后在数据库里面看到的密码是无用的。如果需要检验用户的密码,而是检验用户输入的密码经 md5 加密以后和数据库内的是否相符。

扩展

彩虹表

现在的 MD5 密码数据库(彩虹表)的数据量已经非常庞大了,大部分常用密码都可以通过 MD5 摘要反向查询到密码明文。为了防止内部人员(能够接触到数据库或者数据库备份文件的人员)和外部入侵者通过MD5反查密码明文,更好地保护用户的密码和个人帐户安全(一个用户可能会在多个系统中使用同样的密码,因此涉及到用户在其他网站和系统中的数据安全),需要对 MD5 摘要结果掺入其他信息,称之为加盐。

通过 md5、sha1等全球通用公开的加密算法进行反向查询网站 : https://www.cmd5.com/

例如:

MD5 加密+加盐

在密码学中,是指通过在密码任意固定位置插入特定的字符串,让散列后的结果和使用原始密码的散列结果不相符,这种过程称之为“加盐”。

加盐很好理解,就是给原始密码加上特定的字符串,这样给攻击者增加攻击的成本,加盐的关键在于如何选择盐。

固定字符串

MD5(Password+UserName),即将用户名和密码字符串相加再 MD5,这样的 MD5 摘要基本上不可反查。
但有时候用户名可能会发生变化,发生变化后密码即不可用了(验证密码实际上就是再次计算摘要的过程)。

随机字符串

盐一般要求是固定长度的随机字符串,且每个用户的盐不同,比如10位,数据库可以这样存储:

UsernamePasswordSalt
Freya26b74fc2e533289be4dae7018806d97863UrCwJhTH
Asher05e213b017e654d6edc134751bc9319f84GljVnhDT

采用加密方式 MD5(MD5(password) + salt)

注:以随机字符串作为盐对密码进行加盐仅仅是增加破解密码的难度,可以减少数据库泄露密码以后被破译的风险

计算文件的 MD5 校验值

在命令行下,可以使用 Windows 自带的 certutil 命令来计算一个文件的校验值。

certutil 支持的算法有:MD2 MD4 MD5 SHA1 SHA256 SHA384 SHA512。

certutil 的使用方法非常简单,只需要执行certutil -hashfile 文件名 校验值类型,即可计算出对应文件的校验值。也可以使用 md5sumshash 工具进行计算。

Linux 下可以直接使用 md5sum/sha1sum/sha256sum 等命令直接计算文件的对应校验值。