MD5算法常常被用來(lái)驗(yàn)證網(wǎng)絡(luò)文件傳輸?shù)耐暾?,防止文件被人篡改。MD5全稱是報(bào)文摘要算法(Message-Digest Algorithm 5),此算法對(duì)任意長(zhǎng)度的信息逐位進(jìn)行計(jì)算,產(chǎn)生一個(gè)二進(jìn)制長(zhǎng)度為128位(十六進(jìn)制長(zhǎng)度就是32位)的“指紋”(或稱“報(bào)文摘要”),不同的文件產(chǎn)生相 同的報(bào)文摘要的可能性是非常非常之小的。
在linux或Unix上,md5sum是用來(lái)計(jì)算和校驗(yàn)文件報(bào)文摘要的工具程序。一般來(lái)說(shuō),安裝了Linux后,就會(huì)有md5sum這個(gè)工具,直接在命令行終端直接運(yùn)行??梢杂孟旅娴拿顏?lái)獲取md5sum命令幫助 man md5sum
1丶使用md5sum來(lái)產(chǎn)生指紋(報(bào)文摘要)命令如下:md5sum file > file.md5 或者 md5sum file >>file.md5
注: > 和 >> 的區(qū)別在于: > 表示把由file文件產(chǎn)生的摘要重定向到文件file.md5,但是會(huì)覆蓋file.md5里面的內(nèi)容;而 >> 則將輸出的摘要附加到file.md5文件的后面。也可以把多個(gè)文件的報(bào)文摘要輸出到一個(gè)md5文件中,這要使用通配符*,比如某目錄下有幾個(gè)iso文 件,要把這幾個(gè)iso文件的摘要輸出到iso.md5文件中,命令如下:md5sum *.iso > iso.md5
2丶使用md5報(bào)文摘要驗(yàn)證文件,方法有二:
1. 比如,把下載的文件file和該文件的file.md5報(bào)文摘要文件放在同一個(gè)目錄下,然后用如下命令進(jìn)行驗(yàn)證:md5sum -c file.md5 然后如果驗(yàn)證成功,則會(huì)輸出:正確
2. 比如下載了文件file,然后運(yùn)行下面的命令:md5sum file 命令會(huì)輸出一個(gè)md5的報(bào)文摘要,然后把這個(gè)報(bào)文摘要直接與file.md5中的內(nèi)容比較,如果一樣,就說(shuō)明驗(yàn)證正確。
linux md5sum的用法
適用于 Oracle 用戶的技巧
md5sum 是一個(gè)非常強(qiáng)大的用于安全性實(shí)施的命令。您所管理的某些配置文件(如 listener.ora、tnsnames.ora 和 init.ora)對(duì)于成功的 Oracle 基礎(chǔ)架構(gòu)非常重要,任何修改都可能會(huì)導(dǎo)致停機(jī)。這些通常是更改控制過(guò)程的一部分。不要相信別人所說(shuō)的這些文件并未更改,使用 MD5 校驗(yàn)和執(zhí)行該命令。創(chuàng)建一個(gè)校驗(yàn)和文件,并在每次執(zhí)行計(jì)劃的更改時(shí)重新創(chuàng)建該文件。作為合規(guī)性的一部分,使用 md5sum 命令檢查該文件。如果某個(gè)人無(wú)意中更新了這些重要文件中的一個(gè),您就會(huì)立即捕獲更改。
同樣,您還可以為 $ORACLE_HOME/bin 中的所有可執(zhí)行文件創(chuàng)建 MD5 校驗(yàn)和,并不斷比較它們以捕獲未授權(quán)的修改。
一 生成一個(gè)文件的md5值
[oracle@node1 bin]$ md5sum lsnrctl
87df51eb21ee0643e47988a0d8136f18 lsnrctl
二 檢查文件是否改變
[oracle@node1 ~]$ touch file1 file2
[oracle@node1 ~]$ ls
file1 file2 patch.log
[oracle@node1 ~]$
[oracle@node1 ~]$ md5sum file1 file2>f1f2
[oracle@node1 ~]$ md5sum --check f1f2
file1: OK
file2: OK
[oracle@node1 ~]$ echo "change" >>file1
[oracle@node1 ~]$ md5sum --check f1f2
file1: FAILED
file2: OK
md5sum: WARNING: 1 of 2 computed checksums did NOT match
實(shí)例如下:
Shell
# touch f1.txt f2.txt
# ls
f1.txt f2.txt
# md5sum *.txt > md5sumtest.md5
# cat md5sumtest.md5
d41d8cd98f00b204e9800998ecf8427e f1.txt
d41d8cd98f00b204e9800998ecf8427e f2.txt
# echo "hahaha" > f1.txt
# md5sum -c md5sumtest.md5
f1.txt: FAILED
f2.txt: OK
md5sum: WARNING: 1 of 2 computed checksums did NOT match
# echo "hahaha" > f2.txt
# md5sum -c md5sumtest.md5
f1.txt: FAILED
f2.txt: FAILED
md5sum: WARNING: 2 of 2 computed checksums did NOT match
# cat /dev/null > f1.txt
# md5sum -c md5sumtest.md5
f1.txt: OK
f2.txt: FAILED
md5sum: WARNING: 1 of 2 computed checksums did NOT match
# cat /dev/null > f2.txt
# md5sum -c md5sumtest.md5
f1.txt: OK
f2.txt: OK
# touch f1.txt f2.txt
# ls
f1.txt f2.txt
# md5sum *.txt > md5sumtest.md5
# cat md5sumtest.md5
d41d8cd98f00b204e9800998ecf8427e f1.txt
d41d8cd98f00b204e9800998ecf8427e f2.txt
# echo "hahaha" > f1.txt
# md5sum -c md5sumtest.md5
f1.txt: FAILED
f2.txt: OK
md5sum: WARNING: 1 of 2 computed checksums did NOT match
# echo "hahaha" > f2.txt
# md5sum -c md5sumtest.md5
f1.txt: FAILED
f2.txt: FAILED
md5sum: WARNING: 2 of 2 computed checksums did NOT match
# cat /dev/null > f1.txt
# md5sum -c md5sumtest.md5
f1.txt: OK
f2.txt: FAILED
md5sum: WARNING: 1 of 2 computed checksums did NOT match
# cat /dev/null > f2.txt
# md5sum -c md5sumtest.md5
f1.txt: OK
f2.txt: OK