Linux系統(tǒng)中校驗(yàn)下載文件的完整性方法(MD5,SHA1,PGP)
Linux下的學(xué)習(xí)開(kāi)始總是艱難的,但有的時(shí)候,卻發(fā)現(xiàn)Linux下遠(yuǎn)比Windows的操作來(lái)的實(shí)在的多——這下載文件的完整性就是其中一件,讓本人覺(jué)著很爽的一件事情。在編譯安裝各種軟件的時(shí)候,總要到各個(gè)網(wǎng)站上收集下軟件源碼包。正由于此,軟件的入口就非常復(fù)雜,校驗(yàn)下載的文件是否被修改過(guò)就顯得非常有必要了。而校驗(yàn)方法當(dāng)前一般是MD5,SHA1,PGP三種。在Windows那個(gè)漫長(zhǎng)的歲月里(滄桑有木有),一般只能接觸到前兩種——前提是你會(huì)去校驗(yàn)的話(huà)。
MD5校驗(yàn)
原理:對(duì)文件進(jìn)行MD5 Hash,求出文件的MD5哈希值,通過(guò)下載后文件MD5哈希值和發(fā)布者提供的MD5哈希值是否一致來(lái)判斷文件是否在發(fā)布者發(fā)布之后被篡改過(guò)。
說(shuō)明:壽命老長(zhǎng)的一個(gè)Hash算法,適用范圍廣,網(wǎng)站存儲(chǔ)密碼也經(jīng)常使用。不同的文件產(chǎn)生的MD5哈希值是唯一的,但這點(diǎn)已經(jīng)有辦法通過(guò)對(duì)文件進(jìn)行少量的修改,讓文件的MD5后的哈希值保持一致。
使用:在CentOS下,要對(duì)文件進(jìn)行MD5 Hash是很簡(jiǎn)單的,一個(gè) md5sum 命令即可:
# $是終端提示符,非輸入.
# #號(hào)是注釋
# 沒(méi)有提示符的是輸出
#直接輸出MD5 Hash
$ md5sum your-downloaded-file-name
fd4a1b802373c57c10c926eb7ac823d8 your-downloaded-file-name</p> <p>#將MD5 Hash值保存到md5-hash.txt文件中.
$ md5sum your-downloaded-file-name > md5-hash.txt
# 顯示輸出的md5-hast.txt內(nèi)容
$ cat md5-hash.txt
fd4a1b802373c57c10c926eb7ac823d8 your-downloaded-file-name</p> <p># 通過(guò)md5-hash.txt來(lái)校驗(yàn)?zāi)阆螺d的文件是否正確
$ md5sum -c md5-hash.txt
your-downloaded-file-name: OK
你是文件的發(fā)布者話(huà),你可以通過(guò)md5sum把文件的哈希值發(fā)送給驗(yàn)證者,這樣下載你文件的人就可以通過(guò)MD5哈希值來(lái)驗(yàn)證你的文件正確性。反過(guò)來(lái),我們?cè)诰W(wǎng)站上下載文件之后,同時(shí)可以獲取發(fā)布者的MD5哈希值和本地生成的Hash值對(duì)比,如果一致,認(rèn)為文件是正確的。
SHA1校驗(yàn)
原理: 原理同MD5一樣,都是通過(guò)對(duì)文件進(jìn)行HASH求值,比對(duì)文件發(fā)布者發(fā)布的HASH值,通過(guò)是否相等判斷文件是否被篡改
說(shuō)明: SHA1 HASH求值方法可以說(shuō)是MD5的一個(gè)升級(jí)版本(SHA1 20位,MD5 16位),在HASH求值方面,MD5退出的舞臺(tái)將有SHA1占據(jù)。SHA家族有五個(gè)算法:SHA-1、SHA-224、SHA-256、SHA-384,和SHA-512,后四種有時(shí)候稱(chēng)為SHA2
使用: CentOS有SHA1的命令: sha1sum
# 說(shuō)明同上
# 直接輸出SHA1 Hash
$ sha1sum your-downloaded-file-name
12dc96cbd822598c1230c87622f3591461a77227 your-downloaded-file-name</p> <p># 將SHA1 Hash值保存到文件中
$ sha1sum your-downloaded-file-name > sha1-hash.txt
# 顯示文件內(nèi)容
$ cat sha1-hash.txt
12dc96cbd822598c1230c87622f3591461a77227 your-downloaded-file-name</p> <p>#通過(guò)sha1-hash.txt來(lái)校驗(yàn)我們下載的文件your-downloaded-file-name
# 注意,文件必須要要通過(guò)txt文件中的路徑知道哦
$ sha1sum -c sha1-hash.txt
your-downloaded-file-name: OK
這個(gè)SHA1和MD5基本一致,需要補(bǔ)充說(shuō)明下的是,在使用 md5sum 也好,還是 sha1sum 也罷,校驗(yàn)文件的時(shí)候,務(wù)必要讓系統(tǒng)能夠根據(jù)文件中提供的路徑找到文件,如果文件找不到,是沒(méi)有辦法進(jìn)行校驗(yàn)的。
如果是做多個(gè)文件的Hash校驗(yàn),可以通過(guò)一個(gè)文件保存多個(gè)文件的Hash值即可。
PGP校驗(yàn)
原理:使用非對(duì)稱(chēng)加密,程序生成唯一的密鑰對(duì)(公鑰和私鑰:Public Key和Private Key/Secret Key)。操作方法如下:
1.發(fā)布者通過(guò)用生成的密鑰對(duì)中的私鑰對(duì)要發(fā)布的文件進(jìn)行簽名,得到簽名文件(sign);
2.發(fā)布者將密鑰對(duì)中的公鑰發(fā)布到公鑰服務(wù)器;
3.發(fā)布者將文件和用私鑰生成的簽名一起發(fā)布;
4.驗(yàn)證者下載發(fā)布者發(fā)布的文件和簽名;
5.使用PGP的程序獲取的發(fā)布者第二步發(fā)布的公鑰;
6.使用公鑰校驗(yàn)文件簽名
說(shuō)明:簽名算法中,密鑰的用處分別是:公鑰用于加密信息和驗(yàn)證,私鑰用于解密和簽名。私鑰掌握在信息發(fā)布方,公鑰可以任意分發(fā)。信息發(fā)布方用密鑰進(jìn)行對(duì)信息進(jìn)行簽名,接收方在獲取公鑰后,可以用公鑰對(duì)發(fā)布方發(fā)布的信息+簽名進(jìn)行驗(yàn)證。如果驗(yàn)證失敗則認(rèn)為信息被篡改。在網(wǎng)絡(luò)中,我們經(jīng)常碰到的HTTPS協(xié)議,使用了同樣的機(jī)制。
使用:由于PGP是商業(yè)應(yīng)用程序,在CentOS/Linux中,具有同類(lèi)功能的是GPG(也就是:GnuPG),同樣遵守OpenPGP數(shù)據(jù)加密標(biāo)準(zhǔn)( RFC 4880 ),沒(méi)有安裝可以用 yum install gnupg 安裝,命令是: gpg
# 說(shuō)明同上
# 由于過(guò)程相對(duì)復(fù)雜,并且在實(shí)際使用中,校驗(yàn)用的比較多,因此這里只介紹文件的校驗(yàn)過(guò)程。
# 在獲得文件和簽名時(shí),我們先用gpg校驗(yàn)簽名,此時(shí)文件必須存在
$ gpg --verify downloaded-file-sign.asc
這里有多種情況,如果你只有簽名,但生成簽名的文件不存在時(shí)(系統(tǒng)沒(méi)找到,一般應(yīng)該放在同目錄下面),返回的是:
gpg: 不含簽名的數(shù)據(jù)
gpg: can't hash datafile: No data
當(dāng)你有文件的時(shí)候,但還沒(méi)有與簽名對(duì)應(yīng)的公鑰時(shí),gpg返回的信息類(lèi)似下面:
gpg: 于 2013年05月06日 星期一 18時(shí)27分27秒 CST 創(chuàng)建的簽名,使用 RSA,鑰匙號(hào) 47ACDAFB
gpg: 無(wú)法檢查簽名:No public key
注意:上面的信息在不同的文件和操作系統(tǒng)上生成的信息是不同的。但在沒(méi)有公鑰的時(shí)候,你可以發(fā)現(xiàn)gpg提供了一個(gè)該簽名對(duì)應(yīng)的鑰匙號(hào):47ACDAFB,這個(gè)是我們需要找的公鑰。
上面已經(jīng)說(shuō)過(guò),發(fā)布者已經(jīng)將公鑰發(fā)布到公鑰服務(wù)器中,供驗(yàn)證者下載,因此我們需要到公鑰服務(wù)器中下載公鑰,要下載公鑰,鑰匙號(hào)就很重要了。
可用的公鑰服務(wù)器可以通過(guò)wikipedia 上的Key Server條目來(lái)查看常用的一些key服務(wù)器列表。這里使用hkp://pgp.mit.edu:
# 獲取服務(wù)器上的public key
$ gpg --keyserver hkp://pgp.mit.edu --recv-keys 47ACDAFB
gpg: 下載密鑰‘47ACDAFB’,從 hkp 服務(wù)器 pgp.mit.edu
gpg: 密鑰 47ACDAFB:公鑰“Stephan Mueller <Stephan.Mueller@atsec.com>”已導(dǎo)入
gpg: 沒(méi)有找到任何絕對(duì)信任的密鑰
gpg: 合計(jì)被處理的數(shù)量:1
gpg: 已導(dǎo)入:1
--recv-keys要與--keyserver配合使用,導(dǎo)入密鑰對(duì)的公鑰之后,我們就能夠使用這個(gè)公鑰來(lái)驗(yàn)證我們的簽名了。
再次運(yùn)行我們之前的驗(yàn)證命令(gpg --verify sign-file),就可以看到驗(yàn)證的結(jié)果了。
#這時(shí)候我們?cè)俅悟?yàn)證我們的簽名,就能得到驗(yàn)證結(jié)果了
$ gpg --verify downloaded-file-sign.asc
gpg: 于 2013年05月06日 星期一 18時(shí)27分27秒 CST 創(chuàng)建的簽名,使用 RSA,鑰匙號(hào) 47ACDAFB
gpg: 完好的簽名,來(lái)自于“Stephan Mueller <Stephan.Mueller@atsec.com>”
gpg: 警告:這把密鑰未經(jīng)受信任的簽名認(rèn)證!
gpg: 沒(méi)有證據(jù)表明這個(gè)簽名屬于它所聲稱(chēng)的持有者。
主鑰指紋: B0F4 2D33 73F8 F6F5 10D4 2178 520A 9993 A1C0 52F8
看到這個(gè)結(jié)果,至少確認(rèn)一個(gè)結(jié)果:這個(gè)文件是沒(méi)有被篡改過(guò)的。
一般我們到這步也就差不多了。
但注意消息里面有個(gè)警告,說(shuō)明這個(gè)是未受信任的簽名認(rèn)證。因?yàn)檫@個(gè)公鑰誰(shuí)都可以發(fā)布上去的,如果你確實(shí)需要進(jìn)一步認(rèn)證,可以在簽名認(rèn)證之前,你能還要聯(lián)系下真正的發(fā)布者,確認(rèn)這個(gè)密鑰的信息——指紋!這個(gè)是這個(gè)算法的一個(gè)弱點(diǎn)。
如果簽名認(rèn)證已經(jīng)通過(guò),你也就可以安心的在自己的系統(tǒng)內(nèi)編譯,安裝它了。
關(guān)于PGP的更多信息,可以參考以下網(wǎng)站:
- wikipedia PGP
- ubuntu GPG/PGP
- GnuPG ,HOWTOs中MiniHOWTO中有個(gè)zh的文檔,是中文的
- gentoo GnuPG
相關(guān)文章

集成系統(tǒng)級(jí)Claw模式! Deepin 官宣發(fā)布 25.1 版本
deepin操作系統(tǒng)發(fā)布了最新的 25.1 版本更新,該版本基于 deepin 25 正式版積累的多輪內(nèi)測(cè)成果,在 AI 能力、內(nèi)核版本、桌面環(huán)境、文件管理器以及系統(tǒng)安全等方面進(jìn)行了更新2026-04-13
又一代老硬件退場(chǎng)! Linux 內(nèi)核正式放棄Intel 486 CPU
在過(guò)去的幾十年間,CPU 的架構(gòu)已經(jīng)經(jīng)歷了飛速發(fā)展,x86 系列就是其中之一,而 i486 則屬于該系列中的一個(gè),當(dāng)前,i486 的CPU處理器已經(jīng)夠老,從 Linux 7.1 開(kāi)始將不再有對(duì)2026-04-09
趕緊收藏! 全網(wǎng)最全 Linux 命令總結(jié)
我把 Linux 中最常用、最實(shí)用、最常被問(wèn)到的命令按照實(shí)際使用場(chǎng)景分類(lèi)整理,方便你快速查閱和記憶,內(nèi)容覆蓋日常運(yùn)維、開(kāi)發(fā)調(diào)試、性能分析、文件處理、網(wǎng)絡(luò)、安全、系統(tǒng)管2026-04-08
一分鐘內(nèi)檢查L(zhǎng)inux服務(wù)器性能? 9個(gè)性能檢測(cè)常用的基本命令
今天我們來(lái)看看Linux系統(tǒng)中用于性能監(jiān)控的一系列命令,這些命令可以快速查看機(jī)器的負(fù)載情況,詳細(xì)請(qǐng)看下文介紹2026-03-18
從零基礎(chǔ)到精通! 適合高級(jí)用戶(hù)的15款Linux發(fā)行版推薦
Linux作為操作系統(tǒng)領(lǐng)域靈活性和可定制性的基石,提供了大量滿(mǎn)足不同用戶(hù)需求的發(fā)行版,今天分享適合高級(jí)用戶(hù)的15款Linux發(fā)行版2026-03-10
開(kāi)箱即用? 這4個(gè)高手級(jí)Linux發(fā)行版遠(yuǎn)沒(méi)你想象的那么安全易用
如果你正在糾結(jié)用哪個(gè)發(fā)行版?零基礎(chǔ)新手別被“高端”“極客”“聲明式”這些詞沖昏頭腦,先用好用的,再慢慢進(jìn)階2026-03-10
這幾款SSH工具真的夠用了! Linux好用的ssh工具推薦
在Linux上使用SSH,您需要安裝一個(gè)SSH客戶(hù)端,今天整理找到的8 款 SSH / 終端工具,從免費(fèi)開(kāi)源到企業(yè)級(jí)商用,從輕量化命令行到一站式工具箱,每款都做了介紹與對(duì)比,希望能2026-03-09
在Linux系統(tǒng)下有兩種用戶(hù),即高級(jí)用戶(hù)root,普通用戶(hù),高級(jí)用戶(hù)root可以在系統(tǒng)中做任何事情,普通用戶(hù)僅可在Linux系統(tǒng)中做有限的事情,下面我們就來(lái)看看切換方法2026-02-28
揭秘當(dāng)前登錄用戶(hù)的身份! Linux中使用logname命令的技巧
logname命令就是這樣一個(gè)簡(jiǎn)單但強(qiáng)大的工具,它能幫助我們輕松獲取當(dāng)前登錄用戶(hù)的用戶(hù)名,今天,我們就來(lái)深入探索一下這個(gè)命令的工作原理、使用方法和最佳實(shí)踐2026-02-26
在 Linux 系統(tǒng)中,DNS 緩存是一種將域名和 IP 地址映射關(guān)系緩存在本地的機(jī)制,可以加快域名解析速度,并減輕 DNS 服務(wù)器的負(fù)載2026-02-26



