BASH脚本基础:使用md5命令生成消息摘要指纹

这篇文章介绍一下MD5和md5命令的使用方法。


MD5:信息摘要算法

什么是消息摘要算法

信息摘要算法MD5是Message-Digest Algorithm的缩写,它以散列函数方式对文件可以产生出一个128位的散列值,可以用于保证文件在传输过程中的完整性。MD5由美国密码学家罗纳德·李维斯特(Ronald Linn Rivest)设计,于1992年公开,在 RFC 1321 标准中被加以规范

安全问题和应用场景

1996年后证实此算法存在弱点可以被破解一般建议使用SHA-2,2004年证实MD5无法防止碰撞(collision),因此不适用于安全性认证(如SSL公开密钥认证或是数字签名等),但是在文件的完整性验证方面,还是得到了广泛的应用。

基本概念

  • 消息摘要指纹:message-digest fingerprint:MD5生成的128位的散列值
  • 校验和:checksum:MD5生成的128位的散列值

注:本文中后续统一称之为MD5值


验证环境

liumiaocn:Desktop liumiao$ sw_vers
ProductName:	Mac OS X
ProductVersion:	10.15.6
BuildVersion:	19G73
liumiaocn:Desktop liumiao$ which md5
/sbin/md5
liumiaocn:Desktop liumiao$ which md5sum
/usr/local/bin/md5sum
liumiaocn:Desktop liumiao$ md5sum --version
md5sum (GNU coreutils) 8.31
Copyright (C) 2019 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later .
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Ulrich Drepper, Scott Miller, and David Madore.
liumiaocn:Desktop liumiao$ 

命令:md5

使用方式1: 生成指定字符串的MD5值

执行命令:md5 -s 字符串

  • 执行示例
liumiaocn:Desktop liumiao$ md5 -s "liumiao"
MD5 ("liumiao") = 5fbb93bc914969ed10eb26e8817a5da6
liumiaocn:Desktop liumiao$ 

注:生成的MD5值中不包含换行,如果包含换行符,MD5值为

liumiaocn:Desktop liumiao$ echo "liumiao" | md5
acfac80dc86bf1863f902367090fa47c
liumiaocn:Desktop liumiao$ echo "liumiao" > sourcefilenewline
liumiaocn:Desktop liumiao$ md5 sourcefilenewline 
MD5 (sourcefilenewline) = acfac80dc86bf1863f902367090fa47c
liumiaocn:Desktop liumiao$ 

使用方式2: 静默方式

静默方式-q方式之下,只输出MD5值,可以与其他选项组合使用

执行命令:md5 -q -s 字符串

  • 执行示例
liumiaocn:Desktop liumiao$ md5 -q -s "liumiao"
5fbb93bc914969ed10eb26e8817a5da6
liumiaocn:Desktop liumiao$ 

使用方式3: 生成指定文件的MD5值

执行命令:md5 -s 文件名

  • 执行示例
liumiaocn:Desktop liumiao$ echo -n "liumiao" >sourcefile
liumiaocn:Desktop liumiao$ md5 sourcefile 
MD5 (sourcefile) = 5fbb93bc914969ed10eb26e8817a5da6
liumiaocn:Desktop liumiao$ md5 -q sourcefile 
5fbb93bc914969ed10eb26e8817a5da6
liumiaocn:Desktop liumiao$

可以看到与之前-s生成的值相同,注意散列值是对内容的确认,所以文件的改名或者拷贝不会产生影响

liumiaocn:Desktop liumiao$ cp sourcefile targetfile 
liumiaocn:Desktop liumiao$ md5 targetfile 
MD5 (targetfile) = 5fbb93bc914969ed10eb26e8817a5da6
liumiaocn:Desktop liumiao$ 

你可能感兴趣的:(#,Shell脚本编程,MD5,消息摘要指纹,校验和)