MD5算法經常被用來驗證網絡文件傳輸的完整性,防止文件被人篡改。MD5全稱是報文摘要算法(Message-Digest Algorithm 5),此算法對任意長度的信息逐位進行計算,產生一個二進制長度爲128位(十六進制長度就是32位)的「指紋」(或稱「報文摘要」),不一樣的文件產生相 同的報文摘要的可能性是很是很是之小的。html
MD5的做用是讓大容量信息在用數字簽名軟件簽署私人密鑰前被"壓縮"成一種保密的格式(就是把一個任意長度的字節串變換成必定長的十六進制數字串)。除了MD5之外,其中比較有名的還有sha-一、RIPEMD以及Haval等。linux
對MD5算法簡要的敘述能夠爲:MD5以512位分組來處理輸入的信息,且每一分組又被劃分爲16個32位子分組,通過了一系列的處理後,算法的輸出由四個32位分組組成,將這四個32位分組級聯後將生成一個128位散列值。算法
算法示意圖:shell
linux下生成字符串密文的命令、軟件及使用方法以下安全
這裏以字符串123456爲例子,它的md5密文值爲:e10adc3949ba59abbe56e057f20f883ebash
這裏以1.txt爲須要被加密的文件。網絡
1、 用oppnssl md5 加密字符串和文件的方法。數據結構
1. oppnssl md5 加密字符串的方法工具
a.手動輸入命令及過程以下:編碼
#openssl //在終端中輸入openssl後回車。
OpenSSL> md5 //輸入md5後回車
123456 //接着輸入123456,不要輸入回車。而後按3次ctrl+d。
123456e10adc3949ba59abbe56e057f20f883e //123456後面的就是密文了
解釋:爲什麼在輸入123456後不回車呢?
是由於openssl默認會把回車符當作要加密的字符串中的一個字符,因此獲得的結果不一樣。若是你輸入123456後回車,在按2次ctrl+d。獲得的結果是:
OpenSSL> md5
123456
f447b20a7fcbf53a5d5be013ea0b15af //由於openssl不忽略回車符致使的
b.或者直接用管道命令
# echo -n 123456 | openssl md5 //必需要有-n參數,不然就不是這個結果了。
e10adc3949ba59abbe56e057f20f883e
解釋:爲什麼要加-n這個參數?
-n就表示不輸入回車符,這樣才能獲得正確的結果。若是你不加-n,那麼結果和前面說的同樣爲:
f447b20a7fcbf53a5d5be013ea0b15af //由於openssl不忽略回車符致使的
2.用openssl加密文件。
#openssl md 5 -in 1.txt
##################################################3
Openssl其餘相關加密的命令參數:引自:實用命令:利用openssl進行BASE64編碼解碼、md5/sha1摘要、AES/DES3加密解密 收藏
一. 利用openssl命令進行BASE64編碼解碼(base64 encode/decode)
1. BASE64編碼命令
對字符串‘abc’進行base64編碼:
# echo abc | openssl base64
YWJjCg== (編碼結果)若是對一個文件進行base64編碼(文件名t.txt):
# openssl base64 -in t.txt2. BASE64解碼命令
求base64後的字符串‘YWJjCg==’的原文:
# echo YWJjCg== | openssl base64 -d
abc (解碼結果)若是對一個文件進行base64解碼(文件名t.base64):
# openssl base64 -d -in t.base64二. 利用openssl命令進行md5/sha1摘要(digest)
1. 對字符串‘abc’進行md5摘要計算:echo abc | openssl md5
若對某文件進行md5摘要計算:openssl md5 -in t.txt2. 對字符串‘abc’進行sha1摘要計算:echo abc | openssl sha1
若對某文件進行sha1摘要計算:openssl sha1 -in t.txt三. 利用openssl命令進行AES/DES3加密解密(AES/DES3 encrypt/decrypt)
對字符串‘abc’進行aes加密,使用密鑰123,輸出結果以base64編碼格式給出:
# echo abc | openssl aes-128-cbc -k 123 -base64
U2FsdGVkX18ynIbzARm15nG/JA2dhN4mtiotwD7jt4g= (結果)對以上結果進行解密處理:
# echo U2FsdGVkX18ynIbzARm15nG/JA2dhN4mtiotwD7jt4g= | openssl aes-128-cbc -d -k 123 -base64
abc (結果)若要從文件裏取原文(密文)進行加密(解密),只要指定 -in 參數指向文件名就能夠了。
進行des3加解密,只要把命令中的aes-128-cbc換成des3就能夠了。
注:只要利用openssl help就能夠看到更多的安全算法了。
###############################################
2、 利用md5sum命令
A.在linux或Unix上,md5sum是用來計算和校驗文件報文摘要的工具程序。通常來講,安裝了Linux後,就會有md5sum這個工具,直接在命令行終端直接運行。能夠用下面的命令來獲取md5sum命令幫助 man md5sum
#md5sum –help
有個提示:「With no FILE, or when FILE is -, read standard input.」翻譯過來就是「若是沒有輸入文件選項或者文件選項爲 - ,則從標磚讀取輸入內容」,便可以直接從鍵盤讀取字符串來加密。
利用md5sum加密字符串的方法
# md5sum //而後回車
123456 //輸入123456.而後按兩次ctrl+d.
顯示:
123456e10adc3949ba59abbe56e057f20f883e 紅色表明加密後的值
還能夠用管道命令:
#echo -n '123123' | md5sum
或者寫成md5加密腳本,名字叫md5.sh,
將如下內容複製進腳本里:
#!/bin/bash
echo -n $1 | md5sum | awk '{print $1}'
保存後,給腳本執行權限。
#sh md5.sh 123456
顯示:e10adc3949ba59abbe56e057f20f883e
B.其實也能夠將文本放入文本文件,而後用md5sum 加密改文本,也能夠獲得字符串加密的值。過程以下:
#touch a.txt
#echo -n 123456 > a.txt //將123456寫進文本文件,不能丟了 –n參數,避免回車符干擾
#md5sum a.txt
顯示:e10adc3949ba59abbe56e057f20f883e a.txt
ctrl+d有兩個含義:
一是向程序發送文件輸入結束符EOF。
二是向程序發送exit退出指令。程序收到信號後具體動做是結束輸入、而後等待,仍是直接退出,那就要看該程序捕獲信號後是如何操做的了。
md5sum屬於第一個含義。兩次strl+d了,第一次讀取EOF指令,再次捕獲就會當成exit指令。而shell一類的程序,會直接把ctrl+d解析爲退出指令。
3、獲取字符串的MD5值:
字符串「hello」的MD5:
獲得的MD5值:
- $ echo -n 'hello'|md5sum|cut -d ' ' -f1
命令解釋:
- 5d41402abc4b2a76b9719d911017c592
md5sum: 顯示或檢查 MD5(128-bit) 校驗和,若沒有文件選項,或者文件處爲"-",則從標準輸入讀取。
echo -n : 不打印換行符。
cut: cut用來從標準輸入或文本文件中剪切列或域。剪切文本能夠將之粘貼到一個文本文件。
-d 指定與空格和tab鍵不一樣的域分隔符。-f1 表示第一個域。參考這裏。
獲取文件的MD5值:
獲得的MD5值:
- $ md5sum linuxmint-12-gnome-dvd-32bit.iso|cut -d ' ' -f1
ee3d6e2ca498bc7685b7f17cdb5f2eea使用MD5校驗iso文件:
注意linuxmint-12-gnome-dvd-32bit.md5的內容是:
- $ md5sum linuxmint-12-gnome-dvd-32bit.iso >linuxmint-12-gnome-dvd-32bit.md5
把linuxmint-12-gnome-dvd-32bit和其驗證文件
- ef3d6e2ca498bc7685b7f17cdb5f2eea linuxmint-12-gnome-dvd-32bit.iso
linuxmint-12-gnome-dvd-32bit.md5放到同一目錄下用下面的命令:
若是校驗正確則輸出:
- $ md5sum -c linuxmint-12-gnome-dvd-32bit.md5
若是校驗錯誤則輸出:
- linuxmint-12-gnome-dvd-32bit.iso: 肯定
命令解釋: md5 -c: 從文件中讀取MD5 的校驗值並予以檢查
- linuxmint-12-gnome-dvd-32bit.iso: 失敗
- md5sum: 警告:1/1 生成的校驗和不匹配