什么是 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位,数据库可以这样存储:
Username | Password | Salt |
---|---|---|
Freya | 26b74fc2e533289be4dae7018806d978 | 63UrCwJhTH |
Asher | 05e213b017e654d6edc134751bc9319f | 84GljVnhDT |
采用加密方式 MD5(MD5(password) + salt)
注:以随机字符串作为盐对密码进行加盐仅仅是增加破解密码的难度,可以减少数据库泄露密码以后被破译的风险。
计算文件的 MD5 校验值
在命令行下,可以使用 Windows 自带的 certutil 命令来计算一个文件的校验值。
certutil 支持的算法有:MD2 MD4 MD5 SHA1 SHA256 SHA384 SHA512。
certutil 的使用方法非常简单,只需要执行certutil -hashfile 文件名 校验值类型
,即可计算出对应文件的校验值。也可以使用 md5sums 或 hash 工具进行计算。
Linux 下可以直接使用 md5sum/sha1sum/sha256sum 等命令直接计算文件的对应校验值。