问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Linux系统中校验下载文件的完整性方法

发布网友 发布时间:2023-11-03 11:47

我来回答

1个回答

热心网友 时间:2024-10-31 21:01

Linux下的学习开始总是艰难的,但有的时候,却发现Linux下远比Windows的操作来的实在的多——这下载文件的完整性就是其中一件,让本人觉着很爽的一件事情。在编译安装各种软件的时候,总要到各个网站上收集下软件源码包。正由于此,软件的入口就非常复杂,校验下载的文件是否被修改过就显得非常有必要了。而校验方法当前一般是MD5,SHA1,PGP三种。在Windows那个漫长的岁月里(沧桑有木有),一般只能接触到前两种——前提是你会去校验的话。

MD5校验

原理:对文件进行MD5 Hash,求出文件的MD5哈希值,通过下载后文件MD5哈希值和发布者提供的MD5哈希值是否一致来判断文件是否在发布者发布之后被篡改过。

   说明:寿命老长的一个Hash算法,适用范围广,网站存储密码也经常使用。不同的文件产生的MD5哈希值是唯一的,但这点已经有办法通过对文件进行少量的修改,让文件的MD5后的哈希值保持一致。

   使用:在CentOS下,要对文件进行MD5 Hash是很简单的,一个 md5sum 命令即可:

复制代码

   

代码如下:

# $是终端提示符,非输入.

   # #号是注释

   # 没有提示符的是输出

   #直接输出MD5 Hash

   $ md5sum your-downloaded-file-name

   fd4a1b802373c57c10c926eb7ac823d8 your-downloaded-file-name/pp#将MD5 Hash值保存到md5-hash.txt文件中.

   $ md5sum your-downloaded-file-name md5-hash.txt

   # 显示输出的md5-hast.txt内容

   $ cat md5-hash.txt

   fd4a1b802373c57c10c926eb7ac823d8 your-downloaded-file-name/pp# 通过md5-hash.txt来校验你下载的文件是否正确

   $ md5sum -c md5-hash.txt

   your-downloaded-file-name: OK

你是文件的发布者话,你可以通过md5sum把文件的哈希值发送给验证者,这样下载你文件的人就可以通过MD5哈希值来验证你的文件正确性。反过来,我们在网站上下载文件之后,同时可以获取发布者的MD5哈希值和本地生成的Hash值对比,如果一致,认为文件是正确的。

SHA1校验

原理: 原理同MD5一样,都是通过对文件进行HASH求值,比对文件发布者发布的HASH值,通过是否相等判断文件是否被篡改

   说明: SHA1 HASH求值方法可以说是MD5的一个升级版本(SHA1 20位,MD5 16位),在HASH求值方面,MD5退出的舞台将有SHA1占据。SHA家族有五个算法:SHA-1、SHA-224、SHA-256、SHA-384,和SHA-512,后四种有时候称为SHA2

   使用: CentOS有SHA1的命令: sha1sum

复制代码

   

代码如下:

# 说明同上

   # 直接输出SHA1 Hash

   $ sha1sum your-downloaded-file-name

   12dc96cbd822598c1230c87622f3591461a77227 your-downloaded-file-name/pp# 将SHA1 Hash值保存到文件中

   $ sha1sum your-downloaded-file-name sha1-hash.txt

   # 显示文件内容

   $ cat sha1-hash.txt

   12dc96cbd822598c1230c87622f3591461a77227 your-downloaded-file-name/pp#通过sha1-hash.txt来校验我们下载的文件your-downloaded-file-name

   # 注意,文件必须要要通过txt文件中的路径知道哦

   $ sha1sum -c sha1-hash.txt

   your-downloaded-file-name: OK

这个SHA1和MD5基本一致,需要补充说明下的是,在使用 md5sum 也好,还是 sha1sum 也罢,校验文件的时候,务必要让系统能够根据文件中提供的路径找到文件,如果文件找不到,是没有办法进行校验的。

如果是做多个文件的Hash校验,可以通过一个文件保存多个文件的Hash值即可。

PGP校验

原理:使用非对称加密,程序生成唯一的密钥对(公钥和私钥:Public Key和Private Key/Secret Key)。操作方法如下:

1.发布者通过用生成的密钥对中的私钥对要发布的文件进行签名,得到签名文件(sign);

   2.发布者将密钥对中的公钥发布到公钥服务器;

   3.发布者将文件和用私钥生成的签名一起发布;

   4.验证者下载发布者发布的文件和签名;

   5.使用PGP的程序获取的发布者第二步发布的公钥;

   6.使用公钥校验文件签名

   说明:签名算法中,密钥的用处分别是:公钥用于加密信息和验证,私钥用于解密和签名。私钥掌握在信息发布方,公钥可以任意分发。信息发布方用密钥进行对信息进行签名,接收方在获取公钥后,可以用公钥对发布方发布的信息+签名进行验证。如果验证失败则认为信息被篡改。在网络中,我们经常碰到的HTTPS协议,使用了同样的机制。

使用:由于PGP是商业应用程序,在CentOS/Linux中,具有同类功能的是GPG(也就是:GnuPG),同样遵守OpenPGP数据加密标准( RFC 4880 ),没有安装可以用 yum install gnupg 安装,命令是: gpg

复制代码

   

代码如下:

# 说明同上

   # 由于过程相对复杂,并且在实际使用中,校验用的比较多,因此这里只介绍文件的校验过程。

   # 在获得文件和签名时,我们先用gpg校验签名,此时文件必须存在

   $ gpg --verify downloaded-file-sign.asc

这里有多种情况,如果你只有签名,但生成签名的文件不存在时(系统没找到,一般应该放在同目录下面),返回的是:

复制代码

   

代码如下:

gpg: 不含签名的数据

   gpg: can't hash datafile: No data

当你有文件的时候,但还没有与签名对应的公钥时,gpg返回的信息类似下面:

复制代码

   

代码如下:

gpg: 于 2013年05月06日 星期一 18时27分27秒 CST 创建的签名,使用 RSA,钥匙号 47ACDAFB

   gpg: 无法检查签名:No public key

注意:上面的信息在不同的文件和操作系统上生成的信息是不同的。但在没有公钥的时候,你可以发现gpg提供了一个该签名对应的钥匙号:47ACDAFB,这个是我们需要找的公钥。

上面已经说过,发布者已经将公钥发布到公钥服务器中,供验证者下载,因此我们需要到公钥服务器中下载公钥,要下载公钥,钥匙号就很重要了。

可用的公钥服务器可以通过wikipedia 上的Key Server条目来查看常用的一些key服务器列表。这里使用hkp://pgp.mit.e:

复制代码

   

代码如下:

# 获取服务器上的public key

   $ gpg --keyserver hkp://pgp.mit.e --recv-keys 47ACDAFB

   gpg: 下载密钥‘47ACDAFB’,从 hkp 服务器 pgp.mit.e

   gpg: 密钥 47ACDAFB:公钥“Stephan Mueller Stephan.Mueller@atsec.com”已导入

   gpg: 没有找到任何绝对信任的密钥

   gpg: 合计被处理的数量:1

   gpg: 已导入:1

--recv-keys要与--keyserver配合使用,导入密钥对的公钥之后,我们就能够使用这个公钥来验证我们的签名了。

再次运行我们之前的验证命令(gpg --verify  sign-file),就可以看到验证的结果了。

复制代码

   

代码如下:

#这时候我们再次验证我们的签名,就能得到验证结果了

   $ gpg --verify downloaded-file-sign.asc

   gpg: 于 2013年05月06日 星期一 18时27分27秒 CST 创建的签名,使用 RSA,钥匙号 47ACDAFB

   gpg: 完好的签名,来自于“Stephan Mueller Stephan.Mueller@atsec.com”

   gpg: 警告:这把密钥未经受信任的签名认证!

   gpg: 没有证据表明这个签名属于它所声称的持有者。

   主钥指纹: B0F4 2D33 73F8 F6F5 10D4 2178 520A 9993 A1C0 52F8

看到这个结果,至少确认一个结果:这个文件是没有被篡改过的。

一般我们到这步也就差不多了。

但注意消息里面有个警告,说明这个是未受信任的签名认证。因为这个公钥谁都可以发布上去的,如果你确实需要进一步认证,可以在签名认证之前,你能还要联系下真正的发布者,确认这个密钥的信息——指纹!这个是这个算法的一个弱点。

如果签名认证已经通过,你也就可以安心的在自己的系统内编译,安装它了。

关于PGP的更多信息,可以参考以下网站:

       wikipedia PGP            ubuntu GPG/PGP            GnuPG ,HOWTOs中MiniHOWTO中有个zh的文档,是中文的            gentoo GnuPG    
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
2019哈尔滨煤气费怎么有税? 快手删除的作品如何恢复 体育理念体育理念 有关体育的格言和理念 什么是体育理念 万里挑一算彩礼还是见面礼 绿萝扦插多少天后发芽 绿萝扦插多久发芽 扦插绿萝多久发芽 炖牛排骨的做法和配料 ...没多少油水那种)以后,胃特别难受一阵一阵的 烟头掉在垃圾桶里,里面有塑料袋,有可能烧着吗?2 为什么成交量放大,但股价并没有起伏1 薄型墙暖最低是多厚?厚度很低的话对采暖效果有影响不,想问如果... 乐视的JBL音响怎么样?1 乐视电视可以连接音响吗18 飞机有倒机起动档吗,是不是合车一样挂档就能倒 乐视电视可以直接接音响吗6 一种叫“甘参切片”的土特产,有没有可以网购的?2 梦见我的爱人回来了1 梦见从长凳子下面钻过去 梦见把长凳子倒下来好不好? 新娘身高165cm 婚礼穿高跟鞋还是平底鞋呢26 60周岁以上的老人,适合买什么保险?174 女167cm有必要穿增高的耐克鞋么 成交量放大,但是股价却没暴跌 只是跌了几点而已,这说明什么呢...13 电气二次原理图怎么才能看的懂3 借款人把他打入公司的保证金收条和银行的转钱的凭单作为借款单保... 怎么才能迅速看懂电气系统图88 为什么现在飞机除了直升机都没有倒机功能啊 盐城新扬营销策划有限公司怎么样? 上海新翰琨营销策划有限公司怎么样? 孝感到重庆市云阳县有多少公里 腾讯卡是移动还是联通 已注册的怎样更改444 QQ的大王超级会员,那个大王卡是移动还是联通的?求解 天普太阳能热水器控制器不显示温度,显示ll并报警,么回事?2 薄型墙暖一般有多厚?安装墙上明显不,会不会影响房屋的装饰效果...3 天普太阳能热水器开机后显示面板出现Er 屏幕上恒温指灯闪烁 ... 一步法吹瓶机主要看那几个参数,广州佳速产的一步法吹瓶机质量如... 新车剐蹭影响上牌吗? 快的笔画顺序55 快的笔顺笔画顺序图10 快的笔顺怎么写呀6 大家做跨境电商的,是如何做好多店铺安全工作呢? 郎如陌上尘,我似堤上絮是什么意思 君如陌上尘的含义1 蜗牛移动和中国移动,中国联通是一样的吗?121 隆鼻丰额头,会不会不小心撞一下就变形? 送男友什么生日礼物比较新奇,有创意