龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 操作系统 > LINUX系统 >

Linux系统中校验下载文件的完整性方法(MD5,SHA1,PGP)(2)

时间:2014-05-18 15:00来源:网络整理 作者:网络 点击:
分享到:
代码如下: # 说明同上 # 由于过程相对复杂,并且在实际使用中,校验用的比较多,因此这里只介绍文件的校验过程。 # 在获得文件和签名时,我们先用g


代码如下:

# 说明同上
# 由于过程相对复杂,并且在实际使用中,校验用的比较多,因此这里只介绍文件的校验过程。
# 在获得文件和签名时,我们先用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.edu:


代码如下:

# 获取服务器上的public key
$ gpg --keyserver hkp://pgp.mit.edu --recv-keys 47ACDAFB
gpg: 下载密钥‘47ACDAFB’,从 hkp 服务器 pgp.mit.edu
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的更多信息,可以参考以下网站:

  1. wikipedia PGP
  2. ubuntu GPG/PGP
  3. GnuPG ,HOWTOs中MiniHOWTO中有个zh的文档,是中文的
  4. gentoo GnuPG
精彩图集

赞助商链接