1. 程式人生 > >Linux系統中校驗下載檔案的完整性方法(MD5,SHA1,PGP)

Linux系統中校驗下載檔案的完整性方法(MD5,SHA1,PGP)

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</p> <p>#將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</p> <p># 通過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</p> <p># 將SHA1 Hash值儲存到檔案中
$ sha1sum your-downloaded-file-name > sha1-hash.txt
# 顯示檔案內容
$ cat sha1-hash.txt
12dc96cbd822598c1230c87622f3591461a77227 your-downloaded-file-name</p> <p>#通過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.edu:

複製程式碼程式碼如下:

# 獲取伺服器上的public key
$ gpg --keyserver hkp://pgp.mit.edu --recv-keys 47ACDAFB

gpg: 下載金鑰‘47ACDAFB’,從 hkp 伺服器 pgp.mit.edu
gpg: 金鑰 47ACDAFB:公鑰“Stephan Mueller [email protected]”已匯入
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 [email protected]
gpg: 警告:這把金鑰未經受信任的簽名認證!
gpg: 沒有證據表明這個簽名屬於它所聲稱的持有者。
主鑰指紋: B0F4 2D33 73F8 F6F5 10D4 2178 520A 9993 A1C0 52F8
看到這個結果,至少確認一個結果:這個檔案是沒有被篡改過的。

一般我們到這步也就差不多了。

但注意訊息裡面有個警告,說明這個是未受信任的簽名認證。因為這個公鑰誰都可以釋出上去的,如果你確實需要進一步認證,可以在簽名認證之前,你能還要聯絡下真正的釋出者,確認這個金鑰的資訊——指紋!這個是這個演算法的一個弱點。

如果簽名認證已經通過,你也就可以安心的在自己的系統內編譯,安裝它了。

關於PGP的更多資訊,可以參考以下網站:

wikipedia PGP
ubuntu GPG/PGP
GnuPG ,HOWTOs中MiniHOWTO中有個zh的文件,是中文的
gentoo GnuPG

相關推薦

Linux系統中校下載檔案完整性方法(MD5,SHA1,PGP)

Linux下的學習開始總是艱難的,但有的時候,卻發現Linux下遠比Windows的操作來的實在的多——這下載檔案的完整性就是其中一件,讓本人覺著很爽的一件事情。在編譯安裝各種軟體的時候,總要到各個網站上收集下軟體原始碼包。正由於此,軟體的入口就非常複雜,校驗下

Linux下校下載檔案完整性(MD5,SHA1,PGP)

  原文:https://www.cnblogs.com/Alight/p/4104070.html 檢視: Linux下校驗下載檔案的完整性(MD5,SHA1,PGP) http://blog.useasp.net/archive/2014/03/29/use-md5-sha1-or-pg

Linux EXT檔案系統恢復誤刪檔案方法

我們在管理資料庫和系統的時候,經常需要做rm 刪除檔案的操作。由於Linux是沒有回收站的,rm刪除了檔案或者目錄以後,資料是無法從Windows所謂的回收站中找到並恢復的。這樣的話,資料被誤刪除了以後,想要恢復我們一般需要從備份中,或者找資料恢復公司來恢復資料。但是,在某些比較特殊的情況下,使用了

Linux系統中新增庫檔案路徑的方法

  庫檔案在連結(靜態庫和共享庫)和執行(僅限於使用共享庫的程式)時被使用,其搜尋路徑是在系統中進行設定的。一般 Linux 系統把 /lib 和 /usr/lib 兩個目錄作為預設的庫搜尋路徑,所以使用這兩個目錄中的庫時不需要進行設定搜尋路徑即可直接使用。但是

Linux 系統下 /etc/group 檔案結構

linu 結構 passwd 一行 www 賬號 機會 sys 冒號 這個檔案就是在記錄讓 GID 與組名的對應了 /etc/group 內容有點像這樣: [[email protected] ~]# head -n 4 /etc/group root:x:0:r

Linux系統上傳下載工具rz/sz

linux系統上傳下載工具rz/szLinux系統上傳下載工具rz/szlinux系統中上傳與下載的工具有很多,比如:filezilla.exe等。為了使用linux系統方便,rz / sz命令很方便的幫我們實現了這個功能,但是很多Linux系統初始並沒有這兩個命令。下面對此命令進行說明:下載軟件lrzszl

Linux系統下安裝軟件包方法(上)

base lib .rpm eps tun 4.2 節點 -m syn 安裝軟件包的三種方法 1.rpm工具 2.yum工具 (可以自動安裝依賴包)3.源碼包 rpm工具介紹及使用 1.首先掛載光驅: which-2.20-7.el7.x86_64.rpm

Linux系統文件誤刪除恢復方法;宿主機windows與Linux文件共享!

guest 12c 移動 應該 管理 figure package watermark restore 實驗項目:Linux系統文件誤刪除恢復方法; 宿主機windows與Linux文件共享 實驗環境:一:VMware虛擬機,Linux系統RedHat6.5(什麽版本不重要

Linux系統上傳下載命令rz和sz

file escape yum 進制 二進制 -o -- sca code Linux系統簡單易用的上傳下載命令rz和sz yum install lrzsz -y 上傳(rz)-b, --binary:以二進制方式傳輸,推薦使用-e, --escape:對所有控制字符轉

GridVIew中下載檔案方法探討,方法(7)最佳。

(1)使用Button下載 在GridView屬性中新增: OnRowCommand="GridView1_RowCommand" 在GridView的<Column>中新增: <asp:ButtonField runat="server" Text="下載" HeaderText=

Linux系統touch命令改變檔案的建立時間

使用touch命令:將檔案的時間修改為2013年1月21日19點25分 touch -c -m -t 201301211925 version.dat 前提是必須有這個檔案。 解釋說明: -c表示不建立檔案  --no-create    do

如何在Linux系統中編寫指令碼檔案自動執行

        在叢集的部署和啟動過程中,往往要執行叫較多的命令,特別是已經部署成功在啟動的時候,總有一些初始化的工作要做。這個時候如果還是選擇一個一個去依次執行未免有些太浪費時間,因此選擇了指令碼的方式。並且指令碼的方式也便於向

Linux系統配置靜態IP地址的方法與SecureCRT和RHEL7的連線

Linux系統配置靜態IP地址的方法與SecureCRT和RHEL7的連線 Linux和Windows的區別 Linux中靜態IP地址的配置 Linux和Windows的區別 剛剛安裝的Linux系統與Windows一樣,預設的都是採用DHC

linux系統 使用者身份與檔案許可權(三)

0.檔案的隱藏屬性     Linux系統中的檔案除了具備一般許可權和特殊許可權之外,還有一種隱藏許可權,即被隱藏起來的許可權,預設情況下不能直接被使用者發覺。有使用者曾經在生產環境和RHEL考試題目中碰到過明明許可權充足但卻無法刪除某個檔案的情況,或者僅能在日誌檔案中追

linux系統 使用者身份與檔案許可權(二)

0.檔案的許可權與歸屬     儘管在Linux系統中一切都是檔案,但是每個檔案的型別不盡相同,因此Linux系統使用了不同的字元來加以區分,常見的字元如下所示。  -:普通檔案 d:目錄檔案 l:連結檔案 b:塊裝置檔案 c:字元

linux系統 使用者身份與檔案許可權(一)

0.瞭解檔案的所有者、所屬組以及其他人可對檔案進行的讀(r)、寫(w)、執行(x)等操作,以及如何在Linux系統中新增、刪除、修改使用者賬戶資訊。在Linux系統中建立每個使用者時,將自動建立一個與其同名的基本使用者組(私有組),而且這個基本使用者組只有該使用者一個人。如果該使用者以後被歸納入

Linux系統使用者管理相關檔案

Linux系統使用者管理相關檔案(/etc/skel、/etc/default/useradd、etc/login.defs) /etc/skel 目錄/etc/skel目錄一般是存放使用者啟動檔案的目錄,這個目錄是由root許可權控制,當新增使用者時,這個目錄下的檔案自動複製到新新

Linux下帶空格的檔案刪除方法

實驗模擬: [[email protected] hbk]# touch a" ".txt [[email protected] hbk]# touch a.txt [[email protected] hbk]# ll 總用量 0 -rw-r--r--.

Linux系統修改/etc/profile檔案後導致輸入密碼正確迴圈登陸

問題描述:在Linux系統下安裝eclipse,在為其配置環境變數,任意修改了/etc/prfile 檔案。導致在開啟Linux系統時,登入即使輸入密碼正確也無法進入系統(反覆的跳回輸入密碼介面) 工作環境:我是Windows10加Ubuntu16.4雙系統(此

處理Linux系統下已刪除檔案繼續佔用空間問題

在Linux中,當我們使用rm在linux上刪除了大檔案,但是如果有程序打開了這個大檔案,卻沒有關閉這個檔案的控制代碼,那麼linux核心還是不會釋放這個檔案的磁碟空間,最後造成磁碟空間佔用100%,整個系統無法正常執行。這種情況下,通過df和du命令查詢的磁碟空間,兩者是無法匹配的,可能df顯示磁