Linux中的"哈希"和"校驗和"的用法
如何使用校驗和?本簡介向您展示了它們的含義,以及如何使用適當的工具來驗證文件的完整性。
當你從互聯網上下載軟件時,很可能你已經看到了對哈希或校驗和的引用。通常,會顯示軟件,然后在鏈接附近顯示校驗和。校驗和可以標記為MD5、SHA或其他類似的名稱。許多人不知道這些信息到底是什么意思,也不知道如何處理這些信息。在本文中,我將討論散列的目的以及如何使用它。
1 密碼學
密碼學的三個目標:
(1)保密性—防止未經授權的用戶讀取文件內容。
(2)真實性-證明文件的來源。
(3)完整性—證明文件沒有意外更改。
目前我們討論的是第三項,完整性。在這種情況下,完整性意味著證明數據沒有意外更改。證明完整性在許多情況下都很有用:Internet下載,如Linux發行版、軟件或數據文件。通過NFS、SSH或其他協議進行網絡文件傳輸。驗證軟件安裝。將存儲值(如密碼)與用戶輸入的值進行比較,比較兩個文件以查看它們是否已更改的備份。
2 什么是哈希?
密碼學使用散列來確認文件是不變的。簡單的解釋是,在互聯網下載的每一端,對一個文件使用相同的哈希方法。web管理員在web服務器上對文件進行哈希處理,并發布哈希結果。用戶下載文件并應用相同的哈希方法。比較哈希結果或校驗和。如果下載文件的校驗和與原始文件的校驗和相同,則這兩個文件是相同的,并且沒有由于文件損壞、中間人攻擊等而發生意外更改。
散列是一個單向的過程。哈希結果不能反轉以公開原始數據。校驗和是設置大小的輸出字符串。從技術上講,這意味著散列不是加密,因為加密是要反轉(解密)的。
可以在Linux中使用哪種哈希加密?
3 消息摘要與安全哈希算法
在Linux中,您可能會用到以下兩種哈希方法:MD5型,SHA256型。
大多數Linux發行版以及macOS都內置了這些加密工具。Windows通常不包含這些實用程序,因此如果希望使用此安全技術,則必須從第三方供應商處單獨下載這些實用程序。我認為像這樣的安全工具是Linux和macOS的一部分是很好的。
3.1 消息摘要與安全哈希算法
消息摘要和安全哈希算法有什么區別?不同之處在于所涉及的數學,但兩者實現的目標相似,然而,它們不能互換。如果在連接的一端使用SHA256,則在連接的一端使用MD5生成的哈希將不起作用。兩邊必須使用相同的哈希方法。
SHA256生成的哈希更大,可能需要更多的時間和計算能力才能完成。這被認為是一種更安全的方法。MD5對于大多數基本的完整性檢查可能已經足夠好了,比如文件下載。
3.2 在Linux中,如何可以找到哈希?
Linux系統中,許多地方都使用了哈希。校驗和可以由用戶手動生成,在本文后面再具體介紹。此外,/etc/shadow、rsync和其他實用程序還包括散列功能。
在/etc/shadow文件中存儲的密碼實際上是散列。當您登錄到Linux系統時,身份驗證過程會將存儲的哈希值與您鍵入的密碼的哈希版本進行比較。如果兩個校驗和相同,則原始密碼和您鍵入的密碼相同。換句話說,您輸入了正確的密碼。但是,這是在沒有實際解密系統上存儲的密碼的情況下確定的。檢查/etc/shadow中用戶帳戶第二個字段的前兩個字符。如果這兩個字符是,那么您的密碼將用MD5加密。如果字符是,您的密碼將用SHA256加密。如果值是,則使用SHA512。
例如,使用了SHA512的Fedora虛擬機,可以使用如果命令查看加密類型,如下所示:
sudo tail /etc/shadow | grep -i damon
4. 如何手動生成校驗和
使用哈希實用程序非常簡單,可以在任何可用的Linux系統上完成。此場景的目的是確定文件是否已更改。首先,創建一個名為original.txt的文件,并在里面寫:Original information.。
[damon@localhost ~]$ vim original.txt
[damon@localhost ~]$ cat original.txt
Original information.
接下來,通過哈希算法運行文件。現在用MD5。命令是md5sum。舉個例子:
[damon@localhost ~]$ md5sum original.txt
80bffb4ca7cc62662d951326714a71be original.txt
上面得到的校驗和值。這個值比較長,很難處理。讓我們將該值重定向到一個文件中,以備將來使用:
[damon@localhost ~]$ md5sum original.txt > hashes.txt
[damon@localhost ~]$ cat hashes.txt
80bffb4ca7cc62662d951326714a71be original.txt
將該文件復制到/tmp目錄,然后運行md5sum命令以創建復制文件的校驗和,最后將結果輸出到hashes.txt文件中
[damon@localhost ~]$ cp original.txt /tmp/duplicate.txt
[damon@localhost ~]$ md5sum /tmp/duplicate.txt
80bffb4ca7cc62662d951326714a71be /tmp/duplicate.txt
[damon@localhost ~]$ md5sum /tmp/duplicate.txt >> hashes.txt
比較兩次md5結果值這兩個散列結果是相同的,因此文件在復制過程中沒有更改。
接下來,改變/tmp/duplicate.txt文件內容。
[damon@localhost ~]$ hostname >> /tmp/duplicate.txt
[damon@localhost ~]$ md5sum /tmp/duplicate.txt >> hashes.txt
比較三次md5的結果信息:
[damon@localhost ~]$ cat hashes.txt
80bffb4ca7cc62662d951326714a71be original.txt
80bffb4ca7cc62662d951326714a71be /tmp/duplicate.txt
1f59bbdc4e80240e0159f09ecfe3954d /tmp/duplicate.txt
可以使用--check選項讓md5sum為我們進行比較。
[damon@localhost ~]$ md5sum --check hashes.txt
original.txt: OK
/tmp/duplicate.txt: FAILED
/tmp/duplicate.txt: OK
md5sum: WARNING: 1 computed checksum did NOT match
根據上面的步驟,用sha256sum替換md5sum命令,以查看使用SHA算法的進程是如何工作的。sha256sum命令還包含一個--check checksum選項,用于比較結果散列并顯示一條消息,說明文件是否不同。
注意:如果在Linux、macOS和Windows之間傳輸文件,仍然可以使用哈希驗證文件的完整性。要在macOS上生成哈希值,請運行md5命令。要在Windows中執行此操作,必須下載第三方程序。我個人使用md5checker。根據Windows上PowerShell的版本,也可以使用PowerShell cmdlet get-filehash。
參考:
[1]https://www.linux.com/news/an-introduction-to-hashing-and-checksums-in-linux/
[2]https://www.redhat.com/sysadmin/hashing-checksums
ethereal 可以用來從網絡上抓包,并能對包進行分析。下面介紹windows 下面ethereal 的使用方法。
安裝:
1)安裝winpcap
2)安裝ethereal
使用:
windows 程序,使用很簡單。
啟動ethereal 以后,選擇菜單Capature->Start ,就OK 了。當你不想抓的時候,按一下stop, 抓的包就會顯示在面板中,并且已經分析好了。
下面是一個截圖:
ethereal使用-capture選項
interface: 指定在哪個接口(網卡)上抓包。一般情況下都是單網卡,所以使用缺省的就可以了Limit each packet: 限制每個包的大小,缺省情況不限制。
Capture packets in promiscuous mode: 是否打開混雜模式。如果打開,抓取所有的數據包。一般情況下只需要監聽本機收到或者發出的包,因此應該關閉這個選項。Filter:過濾器。只抓取滿足過濾規則的包(可暫時略過) File:如果需要將抓到的包寫到文件中,在這里輸入文件名稱。use ring buffer: 是否使用循環緩沖。缺省情況下不使用,即一直抓包。注意,循環緩沖只有在寫文件的時候才有效。如果使用了循環緩沖,還需要設置文件的數目,文件多大時回卷。其他的項選擇缺省的就可以了。
ethereal的抓包過濾器
抓包過濾器用來抓取感興趣的包,用在抓包過程中。 抓包過濾器使用的是libcap 過濾器語言,在tcpdump 的手冊中有詳細的解釋,基本結構是: [not] primitive [and|or [not] primitive ...]
如果你想抓取某些特定的數據包時,可以有以下兩種方法,你可以任選一種, 個人比較偏好第二種方式:
1、在抓包的時候,就先定義好抓包過濾器,這樣結果就是只抓到你設定好的那些類型的數據包;
2、先不管三七二十一,把本機收到或者發出的包一股腦的抓下來,然后使用下節介紹的顯示過濾器,只讓Ethereal 顯示那些你想要的那些類型的數據包;
etheral的顯示過濾器(重點內容)
在抓包完成以后,顯示過濾器可以用來找到你感興趣的包,可以根據1)協議2)是否存在某個域3)域值4)域值之間的比較來查找你感興趣的包。
舉個例子,如果你只想查看使用tcp 協議的包,在ethereal 窗口的左下角的Filter 中輸入tcp, 然后回車,ethereal 就會只顯示tcp 協議的包。如下圖所示:
值比較表達式可以使用下面的操作符來構造顯示過濾器自然語言類c 表示舉例eq==ip.addr==10.1.10.20 ne !=ip.addr!=10.1.10.20 gt > frame.pkt_len>10 lt < frame.pkt_len<10 ge >=frame.pkt_len>=10 le <=frame.pkt_len<=10
表達式組合可以使用下面的邏輯操作符將表達式組合起來自然語言類c 表示舉例and && 邏輯與,比如ip.addr=10.1.10.20&&tcp.flag.fin or || 邏輯或,比如ip.addr=10.1.10.20||ip.addr=10.1.10.21 xor ^^ 異或,如tr.dst[0:3]==0.6.29 xor tr.src[0:3]==not ! 邏輯非,如 !llc
例如:我想抓取IP 地址是192.168.2.10 的主機,它所接收或發送的所有的HTTP 報文,那么合適的顯示Filter (過濾器)就是:
在ethereal 使用協議插件
ethereal 能夠支持許多協議,但有些協議需要安裝插件以后才能解,比如H.323,以H.323 協議為例,首先下載ethereal 的H.323 插件,下載地址 下載完了以后將文件(h323.dll) 解壓到ethereal 安裝目錄的plugin>ethereal 能夠支持許多協議,但有些協議需要安裝插件以后才能解,比如H.323,以H.323 協議為例,首先下載ethereal 的H.323 插件,下載地址 下載完了以后將文件(h323.dll) 解壓到ethereal 安裝目錄的plugin\0.9.x 目錄下面,比如我的是0.9.11 ,然后,需要進行一下設置:<.9.x 目錄下面,比如我的是0.9.11 ,然后,需要進行一下設置:
1)啟動ethereal
2)菜單Edit->Preference
3)單擊Protocols 前面的"+"號,展開Protocols
4)找到Q931 ,并單擊
5