[轉(zhuǎn)] MD5校驗(yàn) 原理:對(duì)文件進(jìn)行MD5 Hash,求出文件的MD5哈希值,通過下載后文件MD5哈希值和發(fā)布者提供的MD5哈希值是否一致來判斷文件是否在發(fā)布者發(fā)布之后被篡改過。 復(fù)制代碼 代碼如下:# $是終端提示符,非輸入. # #號(hào)是注釋 # 沒有提示符的是輸出 #直接輸出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># 通過md5-hash.txt來校驗(yàn)?zāi)阆螺d的文件是否正確 $ md5sum -c md5-hash.txt your-downloaded-file-name: OK 你是文件的發(fā)布者話,你可以通過md5sum把文件的哈希值發(fā)送給驗(yàn)證者,這樣下載你文件的人就可以通過MD5哈希值來驗(yàn)證你的文件正確性。反過來,我們?cè)诰W(wǎng)站上下載文件之后,同時(shí)可以獲取發(fā)布者的MD5哈希值和本地生成的Hash值對(duì)比,如果一致,認(rèn)為文件是正確的。 SHA1校驗(yàn) 原理: 原理同MD5一樣,都是通過對(duì)文件進(jìn)行HASH求值,比對(duì)文件發(fā)布者發(fā)布的HASH值,通過是否相等判斷文件是否被篡改 復(fù)制代碼 代碼如下:# 說明同上 # 直接輸出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>#通過sha1-hash.txt來校驗(yàn)我們下載的文件your-downloaded-file-name # 注意,文件必須要要通過txt文件中的路徑知道哦 $ sha1sum -c sha1-hash.txt your-downloaded-file-name: OK 這個(gè)SHA1和MD5基本一致,需要補(bǔ)充說明下的是,在使用 md5sum 也好,還是 sha1sum 也罷,校驗(yàn)文件的時(shí)候,務(wù)必要讓系統(tǒng)能夠根據(jù)文件中提供的路徑找到文件,如果文件找不到,是沒有辦法進(jìn)行校驗(yàn)的。 如果是做多個(gè)文件的Hash校驗(yàn),可以通過一個(gè)文件保存多個(gè)文件的Hash值即可。 PGP校驗(yàn) 原理:使用非對(duì)稱加密,程序生成唯一的密鑰對(duì)(公鑰和私鑰:Public Key和Private Key/Secret Key)。操作方法如下: 1.發(fā)布者通過用生成的密鑰對(duì)中的私鑰對(duì)要發(fā)布的文件進(jìn)行簽名,得到簽名文件(sign); 使用:由于PGP是商業(yè)應(yīng)用程序,在CentOS/Linux中,具有同類功能的是GPG(也就是:GnuPG),同樣遵守OpenPGP數(shù)據(jù)加密標(biāo)準(zhǔn)( RFC 4880 ),沒有安裝可以用 yum install gnupg 安裝,命令是: gpg 復(fù)制代碼 代碼如下:# 說明同上 # 由于過程相對(duì)復(fù)雜,并且在實(shí)際使用中,校驗(yàn)用的比較多,因此這里只介紹文件的校驗(yàn)過程。 # 在獲得文件和簽名時(shí),我們先用gpg校驗(yàn)簽名,此時(shí)文件必須存在 $ gpg --verify downloaded-file-sign.asc 這里有多種情況,如果你只有簽名,但生成簽名的文件不存在時(shí)(系統(tǒng)沒找到,一般應(yīng)該放在同目錄下面),返回的是: 復(fù)制代碼 代碼如下:gpg: 不含簽名的數(shù)據(jù) gpg: can't hash datafile: No data 當(dāng)你有文件的時(shí)候,但還沒有與簽名對(duì)應(yīng)的公鑰時(shí),gpg返回的信息類似下面: 復(fù)制代碼 代碼如下:gpg: 于 2013年05月06日 星期一 18時(shí)27分27秒 CST 創(chuàng)建的簽名,使用 RSA,鑰匙號(hào) 47ACDAFB gpg: 無法檢查簽名:No public key 注意:上面的信息在不同的文件和操作系統(tǒng)上生成的信息是不同的。但在沒有公鑰的時(shí)候,你可以發(fā)現(xiàn)gpg提供了一個(gè)該簽名對(duì)應(yīng)的鑰匙號(hào):47ACDAFB,這個(gè)是我們需要找的公鑰。 上面已經(jīng)說過,發(fā)布者已經(jīng)將公鑰發(fā)布到公鑰服務(wù)器中,供驗(yàn)證者下載,因此我們需要到公鑰服務(wù)器中下載公鑰,要下載公鑰,鑰匙號(hào)就很重要了。 可用的公鑰服務(wù)器可以通過wikipedia 上的Key Server條目來查看常用的一些key服務(wù)器列表。這里使用hkp://pgp.mit.edu: 復(fù)制代碼 代碼如下:# 獲取服務(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: 沒有找到任何絕對(duì)信任的密鑰 gpg: 合計(jì)被處理的數(shù)量:1 gpg: 已導(dǎo)入:1 --recv-keys要與--keyserver配合使用,導(dǎo)入密鑰對(duì)的公鑰之后,我們就能夠使用這個(gè)公鑰來驗(yàn)證我們的簽名了。 再次運(yùn)行我們之前的驗(yàn)證命令(gpg --verify sign-file),就可以看到驗(yàn)證的結(jié)果了。 復(fù)制代碼 代碼如下:#這時(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: 完好的簽名,來自于“Stephan Mueller <Stephan.Mueller@atsec.com>” gpg: 警告:這把密鑰未經(jīng)受信任的簽名認(rèn)證! gpg: 沒有證據(jù)表明這個(gè)簽名屬于它所聲稱的持有者。 主鑰指紋: B0F4 2D33 73F8 F6F5 10D4 2178 520A 9993 A1C0 52F8 看到這個(gè)結(jié)果,至少確認(rèn)一個(gè)結(jié)果:這個(gè)文件是沒有被篡改過的。 一般我們到這步也就差不多了。 但注意消息里面有個(gè)警告,說明這個(gè)是未受信任的簽名認(rèn)證。因?yàn)檫@個(gè)公鑰誰都可以發(fā)布上去的,如果你確實(shí)需要進(jìn)一步認(rèn)證,可以在簽名認(rèn)證之前,你能還要聯(lián)系下真正的發(fā)布者,確認(rèn)這個(gè)密鑰的信息——指紋!這個(gè)是這個(gè)算法的一個(gè)弱點(diǎn)。 如果簽名認(rèn)證已經(jīng)通過,你也就可以安心的在自己的系統(tǒng)內(nèi)編譯,安裝它了。 關(guān)于PGP的更多信息,可以參考以下網(wǎng)站:
|
|