MD5值的簡介和檢視

lhrbest發表於2018-01-15

MD5值的簡介和檢視






MD5Message-Digest Algorithm 5(資訊-摘要演算法第5版),用於確保資訊傳輸完整一致。每個檔案都可以用MD5驗證程式算出一個固定的MD5碼來。

MD5在論壇上、軟體釋出時經常用,是為了保證檔案的正確性,防止一些人盜用程式,加些木馬或者篡改版權,設計的一套驗證系統。每個檔案都可以用MD5驗證程式算出一個固定的MD5碼來。軟體作者往往會事先計算出他的程式的MD5碼並帖在網上。因此,在網上看到某個程式下載旁註明瞭MD5碼時,可以把它記下來,下載了這個程式後用MD5驗證程式計算你所下載的檔案的MD5碼,和你之前記下MD5碼比較,就知道你下的是不是原版了,如果兩者相同,那麼你所下載的是原版。如果計算出來的和網上註明的不匹配,那麼你下載的這個檔案不完整,或是被別人動過手腳。

Windows命令列檢視檔案的MD5

certutil -hashfile D:\1.exe MD5

certutil -hashfile D:\1.exe SHA1

certutil -hashfile D:\1.exe SHA256

Linux上使用md5sum來檢視檔案的MD5

[root@localhost linux_RHEL]# which md5sum

/usr/bin/md5sum

[root@localhost linux_RHEL]# ll

total 7472836

drwxrwxrwx 1 root root       4096 Apr 17  2015 linux è???????è???

-rwxrwxrwx 1 root root 3703490560 Dec 29  2014 rhel-server-5.5-x86_64-dvd.iso

-rwxrwxrwx 1 root root 3853516800 Apr 25  2014 rhel-server-6.5-x86_64-dvd.iso

drwxrwxrwx 1 root root       4096 Sep 10  2014 sendEmail

-rwxrwxrwx 1 root root   36419584 Feb 14  2016 slitaz-4.0.iso

-rwxrwxrwx 1 root root   58740736 Feb 14  2016 slitaz5.0cn-20150423.iso

drwxrwxrwx 1 root root       4096 Apr 14  2015 ?…?????è???

[root@localhost linux_RHEL]# md5sum rhel-server-5.5-x86_64-dvd.iso

f3119f883257ef9041234feda2f1cad0  rhel-server-5.5-x86_64-dvd.iso

[root@localhost linux_RHEL]#


D:\Users\xiaomaimiao>certutil -hashfile G:\安裝檔案\linux_RHEL\rhel-server-5.5-x86_64-dvd.iso MD5

MD5 雜湊(檔案 G:\安裝檔案\linux_RHEL\rhel-server-5.5-x86_64-dvd.iso):

f3 11 9f 88 32 57 ef 90 41 23 4f ed a2 f1 ca d0

CertUtil: -hashfile 命令成功完成。








              眾所周知,md5,sha1作為一種演算法被廣泛採用,尤其是在驗證一些軟體時尤為重要。
      在Linux上,md5sum和sha1sum是校驗檔案的重要工具,其使用方式總結如下:
一:驗證md5值
      #md5sum filename
      比如:
            大家比較常用的軟體VirtualBox-4.3.0-89960-Win.exe,我們在linux下下達如下命令
      [root@localhost home]# md5sum  VirtualBox-4.3.0-89960-Win.exe
      bd0cbd18d7c817a776f09d141efaa9d9  VirtualBox-4.3.0-89960-Win.exe
      可得出VirtualBox-4.3.0-89960-Win.exe的md5值
二:驗證shal值
       #sha1sum filename(注意是數字1不是字母l)
       比如:
            同是上面的軟體,我們在linux下下達
      [root@localhost home]# sha1sum VirtualBox-4.3.0-89960-Win.exe
      5ecaa5d6f1a2e93ab766e5a6ea4ac9cf9a73f244  VirtualBox-4.3.0-89960-Win.exe
            其實,通過實際操作,發現下達
      #shasum filename 也可
      [root@localhost home]# shasum VirtualBox-4.3.0-89960-Win.exe
      5ecaa5d6f1a2e93ab766e5a6ea4ac9cf9a73f244  VirtualBox-4.3.0-89960-Win.exe
      這樣就知道VirtualBox-4.3.0-89960-Win.exe的sha1值了。




     MD5演算法:是計算機廣泛使用的一種雜湊演算法,將資料(如漢字)運算為另一固定長度值,用於確保資訊傳輸完整一致。java,C++ 等多種程式語言都有MD5的實現,可直接使用。

       檔案MD5值:每個檔案都可以用MD5驗證程式算出一個固定的MD5值,是獨一無二的。一般來說,開發方會在軟體釋出時預先算出檔案的MD5值,如果檔案被盜用,加了木馬或者被篡改版權,那麼它的MD5值也隨之改變,也就是說我們對比檔案當前的MD5值和它標準的MD5值來檢驗它是否正確和完整。

       檢視檔案MD5值:圖解教程,自己去看吧 http://jingyan.baidu.com/article/c910274b9c8261cd361d2d99.html





  https://baike.baidu.com/item/MD5/212708?fr=aladdin




Linux中檔案MD5校驗

md5sum命令用於生成檔案的md5數字摘要,並可以驗證檔案內容是否發生了改變,間接地還可以檢驗兩個檔案內容是否完全相同。因為md5sum是讀取檔案內容來計算校驗碼的,因此只能驗證檔案內容,而無法驗證檔案屬性。

[root@xuexi ~]# cp -a /etc/fstab /tmp/fstab

[root@xuexi ~]# cp -a /etc/fstab /tmp/fstab1

生成檔案的md5值。

[root@xuexi ~]# md5sum /tmp/fstab /tmp/fstab1
a612cd5d162e4620b442b0ff3474bf98 /tmp/fstab
a612cd5d162e4620b442b0ff3474bf98 /tmp/fstab1

發現這兩個檔案md5值完全一樣,也就說明這兩個檔案完全相同。

由於生成的md5資訊中,每個md5值後都緊跟著對應的檔案的路徑(可能是相對路徑),於是將生成的md5儲存到某個檔案中,以後可以使用該檔案來檢查md5值對應檔案內容是否發生了修改。

例如,將上述兩個檔案的md5資訊儲存到fs.md5sum中,然後使用"md5sum -c"可以檢查原始檔是否完整或是否被修改過。這個檢查是內容上的,許可權和屬性等的改變不會影響md5值,所以不會檢測出問題。

[root@xuexi ~]# md5sum /tmp/fstab /tmp/fstab1 >/tmp/fs.md5sum

[root@xuexi ~]# md5sum -c /tmp/fs.md5sum /tmp/fstab: OK /tmp/fstab1: OK

修改/tmp/fstab1的內容,然後再檢測。

[root@xuexi tmp]# echo aaa >>/tmp/fstab1

[root@xuexi tmp]# md5sum -c /tmp/fs.md5sum /tmp/fstab: OK /tmp/fstab1: FAILED
md5sum: WARNING: 1 of 2 computed checksums did NOT match

當使用了"-c"選項時,還支援以下選項:

--quiet:不顯示驗證結果為OK的記錄

--status:完全不顯示任何資訊,只能通過命令的退出狀態碼判斷驗證結果是否有failed。只要有一條failed記錄,則狀態碼為1,否則為0。

[root@xuexi tmp]# md5sum --status -c /tmp/fs.md5sum

[root@xuexi tmp]# echo $? 1

通過比較md5sum的值,可以判斷出多個檔案的內容是否完全一致,但肉眼判斷並不方便,所以寫出指令碼批量判斷。指令碼見:shell指令碼示例:批量比較多個檔案的內容是否相同



獲取字串的MD5值:

字串“hello”的MD5:

  1. $ echo -n 'hello'|md5sum|cut -d ' ' -f1

得到的MD5值:
  1. 5d41402abc4b2a76b9719d911017c592

命令解釋:
md5sum: 顯示或檢查 MD5(128-bit) 校驗和,若沒有檔案選項,或者檔案處為"-",則從標準輸入讀取。
echo -n : 不列印換行符。
cut:  cut用來從標準輸入或文字檔案中剪下列或域。剪下文字可以將之貼上到一個文字檔案。 
        -d 指定與空格和tab鍵不同的域分隔符。-f1 表示第一個域。參考這裡。

獲取檔案的MD5值:


  1. $ md5sum linuxmint-12-gnome-dvd-32bit.iso|cut -d ' ' -f1
得到的MD5值:
ee3d6e2ca498bc7685b7f17cdb5f2eea

使用MD5校驗iso檔案:

  1. $ md5sum linuxmint-12-gnome-dvd-32bit.iso >linuxmint-12-gnome-dvd-32bit.md5

注意linuxmint-12-gnome-dvd-32bit.md5的內容是:
  1. ef3d6e2ca498bc7685b7f17cdb5f2eea linuxmint-12-gnome-dvd-32bit.iso

把linuxmint-12-gnome-dvd-32bit和其驗證檔案
    linuxmint-12-gnome-dvd-32bit.md5放到同一目錄下用下面的命令:
  1. $ md5sum -c linuxmint-12-gnome-dvd-32bit.md5

如果校驗正確則輸出: 
  1. linuxmint-12-gnome-dvd-32bit.iso: 確定

如果校驗錯誤則輸出:
  1. linuxmint-12-gnome-dvd-32bit.iso: 失敗
  2. md5sum: 警告:1/1 生成的校驗和不匹配
命令解釋:
md5 -c: 從檔案中讀取MD5 的校驗值並予以檢查

Message Digest Algorithm MD5為電腦保安領域廣泛使用的一種雜湊函式,用以提供訊息的完整性保護。該演算法的檔案號為RFC 1321(R.Rivest,MIT Laboratory for Computer Science and RSA Data Security Inc. April 1992)
keywords:Hash,SHA,Ronald L. Rivest,MD5,IETF(Internet Engineering Task Force)


linux命令詳解:md5sum命令

前言

在網路傳輸、裝置之間轉存、複製大檔案等時,可能會出現傳輸前後資料不一致的情況。這種情況在網路這種相對更不穩定的環境中,容易出現。那麼校驗檔案的完整性,也是勢在必行的。

使用說明

md5sum命令用於生成和校驗檔案的md5值。它會逐位對檔案的內容進行校驗。是檔案的內容,與檔名無關,也就是檔案內容相同,其md5值相同。md5值是一個128位的二進位制資料,轉換成16進位制則是32(128/4)位的進位制值。

md5校驗,有很小的概率不同的檔案生成的md5可能相同。比md5更安全的校驗演算法還有SHA*系列的。

在網路傳輸時,我們校驗原始檔獲得其md5sum,傳輸完畢後,校驗其目標檔案,並對比如果原始檔和目標檔案md5 一致的話,則表示檔案傳輸無異常。否則說明檔案在傳輸過程中未正確傳輸。

重要的選項:

-b 以二進位制模式讀入檔案內容

-t 以文字模式讀入檔案內容

-c 根據已生成的md5值,對現存檔案進行校驗

--status 校驗完成後,不生成錯誤或正確的提示資訊,可以通過命令的返回值來判斷。

使用舉例

生成檔案md5值

md5sum file

 1: [root@master lianxi]# md5sum data 
 2: 0a6de444981b68d6a049053296491e49  data

使用通配對多個檔案進行md5

 1: [root@master lianxi]# md5sum *
 2: 0a6de444981b68d6a049053296491e49  data
 3: 13df384c47dd2638fd923f60c40224c6  data2

md5sum校驗的是檔案內容,與檔名無關

相同內容的檔案的md5一樣。如下我先對檔案進行復制,然後對同內容不同名的檔案進行md5,md5值一樣

 1: [root@master lianxi]# cp data  data.bak
 2: [root@master lianxi]# ls
 3: data  data.bak
 4: [root@master lianxi]# md5sum *
 5: 0a6de444981b68d6a049053296491e49  data
 6: 0a6de444981b68d6a049053296491e49  data.bak

以文字模式或二進位制模式讀入檔案並對其進行校驗

-b 以二進位制模式讀入內容

-t 以文字模式讀入檔案內容進行校驗

雖然是不同的讀入模式,但是在進行求md5的時候,是一樣的,因為是逐位校驗的。

如下文字檔案,無論通過哪種模式讀取md5都一致。

 1: [root@master lianxi]# file data
 2: data: ASCII text
 3: [root@master lianxi]# md5sum data
 4: 0a6de444981b68d6a049053296491e49  data
 5: [root@master lianxi]# md5sum -b data
 6: 0a6de444981b68d6a049053296491e49 *data
 7: [root@master lianxi]# md5sum -t data
 8: 0a6de444981b68d6a049053296491e49  data

md5值重定向

將生成md5值重定向到指定的檔案,通常檔案的副檔名我們會命為.md5

 1: [root@master lianxi]# md5sum data > data.md5
 2: [root@master lianxi]# md5sum data
 3: 0a6de444981b68d6a049053296491e49  data
 4: [root@master lianxi]# cat data.md5 
 5: 0a6de444981b68d6a049053296491e49  data

將多個檔案的md5重定向到指定的檔案

每個檔案的md5生成為一行

 1: [root@master lianxi]# ls
 2: data  data.bak  data.md5  d.md5
 3: [root@master lianxi]# md5sum data* > d.md5
 4: [root@master lianxi]# cat d.md5 
 5: 0a6de444981b68d6a049053296491e49  data
 6: 0a6de444981b68d6a049053296491e49  data.bak
 7: 0bd94658869c53cdcdf35a0f7de93e01  data.md5

重定向追加

這裡新增檔案ls,單獨求其md5,將其md5追加到檔案中

 1: [root@master lianxi]# cp /bin/ls .
 2: [root@master lianxi]# ls
 3: data  data.bak  data.md5  d.md5  ls
 4: [root@master lianxi]# md5sum ls >> d.md5 
 5: [root@master lianxi]# cat d.md5 
 6: 0a6de444981b68d6a049053296491e49  data
 7: 0a6de444981b68d6a049053296491e49  data.bak
 8: 0bd94658869c53cdcdf35a0f7de93e01  data.md5
 9: c6337b20f3c159544bff5cf622391f9e  ls

md5校驗

-c選項來對檔案md5進行校驗。校驗時,根據已生成的md5來進行校驗。生成當前檔案的md5,並和之前已經生成的md5進行對比,如果一致,則返回OK,否則返回錯誤資訊

md5sum –c d.md5

 1: [root@master lianxi]# md5sum -c d.md5 
 2: data: OK
 3: data.bak: OK
 4: data.md5: OK
 5: ls: OK

修改檔案後,檔案md5變化

 1: [root@master lianxi]# ls
 2: data
 3: [root@master lianxi]# md5sum data 
 4: 2360752c3368ca4f89169f5ecc06e383  data
 5: [root@master lianxi]# md5sum data  > data.md5
 6: [root@master lianxi]# echo "lwg" >> data
 7: [root@master lianxi]# md5sum data
 8: 287d237083a42f09785daa46a5fa3afe  data
 9: [root@master lianxi]# md5sum -c data.md5 
 10: data: FAILED
 11: md5sum: WARNING: 1 of 1 computed checksum did NOT match

--status,不顯示校驗資訊,以命令返回值來判斷

校驗一致返回0,不一致返回1

 1: [root@master lianxi]# md5sum -c data.md5 
 2: data: FAILED
 3: md5sum: WARNING: 1 of 1 computed checksum did NOT match
 4: [root@master lianxi]# md5sum -c --status data.md5 
 5: [root@master lianxi]# echo $?
 6: 1

多個檔案檔案校驗和grep連用

通過grep將正確的資訊過濾掉

 1: [root@master lianxi]# md5sum -c ../value.md5 
 2: acpid: OK
 3: acpid.1: OK
 4: anaconda.log: OK
 5: anaconda.syslog: OK
 6: anaconda.xlog: OK
 7: boot.log: OK
 8: boot.log.1: OK
 9: ...
 10: ...
 11: 省略中間部分
 12: ...
 13: ...
 14: yum.log.2: OK
 15: md5sum: WARNING: 1 of 56 computed checksums did NOT match
 1: [root@master lianxi]# md5sum -c ../value.md5 | grep -v OK 
 2: md5sum: WARNING: 1 of 56 computed checksums did NOT match
 3: cron.1: FAILED

特殊說明

1)md5sum 是校驗檔案內容,與檔名是否相同無關

2)md5sum值逐位校驗,所以檔案越大,校驗時間越長。

總結

通過md5sum來校驗生成檔案校驗碼,來發現檔案傳輸(網路傳輸、複製、本地不同裝置間的傳輸)異常造成的檔案內容不一致的情況。




linux中校驗檔案完整性(md5,sha1)

  經常在Linux下下載軟體的人,一定會有一個良好的習慣:校驗檔案的hash,以確定檔案的完整性甚至是安全性。我配置環境的時候也恰好用到了,筆者的是一個lubuntu的機子。這裡我大致做個記錄。(不瞭解hash的請自行查閱相關資料)

MD5校驗:


1
2
magic@luna:~/lnmp$ md5sum lnmp1.3-full.tar.gz
a5aa55cd177cd9b9176ad697c12e45c0  lnmp1.3-full.tar.gz


或者我們可以儲存到一個檔案中:

1
magic@luna:~/lnmp$ md5sum lnmp1.3-full.tar.gz > md5-hash.txt


然後:

1
2
magic@luna:~/lnmp$ cat md5-hash.txt
a5aa55cd177cd9b9176ad697c12e45c0  lnmp1.3-full.tar.gz


還可以根據已經得到的hash來確認檔案:


1
2
3
magic@luna:~/lnmp$ md5sum -c md5-hash.txt
lnmp1.3-full.tar.gz: 確定
magic@luna:~/lnmp$



SHA1:

這個類似於MD5校驗方法:


1
2
magic@luna:~/lnmp$ sha1sum lnmp1.3-full.tar.gz
ee7ec6e8be0b3b5a481df903427261236f9bb057  lnmp1.3-full.tar.gz


或者儲存到檔案中再去檢視:

1
2
3
magic@luna:~/lnmp$ sha1sum lnmp1.3-full.tar.gz > sha1-hash.txt
magic@luna:~/lnmp$ cat sha1-hash.txt
ee7ec6e8be0b3b5a481df903427261236f9bb057  lnmp1.3-full.tar.gz


已知hash情況下的校驗(通常這個情況還挺多):

1
2
3
magic@luna:~/lnmp$ sha1sum -c sha1-hash.txt
lnmp1.3-full.tar.gz: 確定
magic@luna:~/lnmp$


注意事項:在已知hash數值情況下對檔案進行校驗的時候要注意,一定要讓系統能夠找到要校驗的檔案。否則就沒法進行校驗了。具體的使用說明,可以通過md5(sha1)sum --help來檢視:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
magic@luna:~/lnmp$ sha1sum --help
Usage: sha1sum [OPTION]... [FILE]...
Print or check SHA1 (160-bit) checksums.
 
如果沒有指定檔案,或者檔案為"-",則從標準輸入讀取。
 
  -b, --binary         read in binary mode
  -c, --check       從檔案中讀取SHA1 的校驗值並予以檢查
      --tag            create a BSD-style checksum
  -t, --text        以純文字模式讀取(預設)
 
The following five options are useful only when verifying checksums:
      --ignore-missing  don't fail or report status for missing files
      --quiet          don't print OK for each successfully verified file
      --status         don't output anything, status code shows success
      --strict         exit non-zero for improperly formatted checksum lines
  -w, --warn           warn about improperly formatted checksum lines
 
      --help        顯示此幫助資訊並退出
      --version     顯示版本資訊並退出
 
The sums are computed as described in FIPS-180-1.  When checking, the input
should be a former output of this program.  The default mode is to print a
line with checksum, a space, a character indicating input mode ('*' for binary,
' ' for text or where binary is insignificant), and name for each FILE.
 
GNU coreutils online help:
請向 報告sha1sum 的翻譯錯誤
Full documentation at:
or available locally via: info '(coreutils) sha1sum invocation'






About Me

.............................................................................................................................................

● 本文作者:小麥苗,部分內容整理自網路,若有侵權請聯絡小麥苗刪除

● 本文在itpub(http://blog.itpub.net/26736162/abstract/1/)、部落格園(http://www.cnblogs.com/lhrbest)和個人微信公眾號(xiaomaimiaolhr)上有同步更新

● 本文itpub地址:http://blog.itpub.net/26736162/abstract/1/

● 本文部落格園地址:http://www.cnblogs.com/lhrbest

● 本文pdf版、個人簡介及小麥苗雲盤地址:http://blog.itpub.net/26736162/viewspace-1624453/

● 資料庫筆試面試題庫及解答:http://blog.itpub.net/26736162/viewspace-2134706/

● DBA寶典今日頭條號地址:http://www.toutiao.com/c/user/6401772890/#mid=1564638659405826

.............................................................................................................................................

● QQ群號:230161599(滿)、618766405

● 微信群:可加我微信,我拉大家進群,非誠勿擾

● 聯絡我請加QQ好友646634621,註明新增緣由

● 於 2018-01-01 06:00 ~ 2018-01-31 24:00 在魔都完成

● 文章內容來源於小麥苗的學習筆記,部分整理自網路,若有侵權或不當之處還請諒解

● 版權所有,歡迎分享本文,轉載請保留出處

.............................................................................................................................................

小麥苗的微店https://weidian.com/s/793741433?wfr=c&ifr=shopdetail

小麥苗出版的資料庫類叢書http://blog.itpub.net/26736162/viewspace-2142121/

好訊息:小麥苗OCP、OCM開班啦,詳情請點選http://blog.itpub.net/26736162/viewspace-2148098/

.............................................................................................................................................

使用微信客戶端掃描下面的二維碼來關注小麥苗的微信公眾號(xiaomaimiaolhr)及QQ群(DBA寶典),學習最實用的資料庫技術。

小麥苗的微信公眾號小麥苗的DBA寶典QQ群2《DBA筆試面寶典》讀者群小麥苗的微店

   小麥苗的微信公眾號      小麥苗的DBA寶典QQ群2     《DBA筆試面試寶典》讀者群       小麥苗的微店

.............................................................................................................................................

MD5值的簡介和檢視
DBA筆試面試講解群
《DBA寶典》讀者群 歡迎與我聯絡



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26736162/viewspace-2150149/,如需轉載,請註明出處,否則將追究法律責任。

相關文章