關於MD5 32位和16位的區別以及linux /etc/shadow 檔案詳解
有人說md5,128位,32位,16位,到底md5多長?
md5的長度,預設為128bit,也就是128個0和1的二進位制串。
這樣表達是很不友好的。
所以將二進位制轉成了16進位制,每4個bit表示一個16進位制,
所以128/4 = 32 換成16進製表示後,為32位了。
為什麼網上還有md5是16位的呢?
網上有很多帖子,md5 32位 16位 加密 區別。
仔細觀察admin生成的32位和16位的md5值……
查詢結果:
md5(admin,32) = 21232f297a57a5a743894a0e4a801fc3
md5(admin,16) = 7a57a5a743894a0e
看出來了吧!
其實16位的長度,是從32位md5值來的。是將32位md5去掉前八位,去掉後八位得到的。
下面就說說linux密碼的問題!
linux的root密碼存在於“/etc/shadow”這個檔案中,不過要有root許可權才能在linux下看到“/etc/shadow”這個檔案。我用自己的虛擬機器做一個演示,如下圖所示:
上面這個圖中,我沒有設定root的密碼,可以看到root那一行最開始有個“!”。接著看下面的圖,已經設定了root密碼:
在這裡,主要是對shadow密碼儲存結構做一些介紹,參考了一下網路上的相關內容,自己總結一下。
密文字串格式為:$id$salt$encrypted,通過$來分割,其中$id用來指定使用的演算法,如下表格所示:
ID | Method |
1 | MD5 |
2a |
Blowfish(not in mainline glibc;added in some Linux distribution) |
5 |
SHA-256(since glibc 2.7) |
6 |
SHA-512(since glibc 2.7) |
從我上面的截圖可以看到,密文采用的是SHA-512演算法。$salt是一個最多16個字元的隨機生成的字串,用來增加破解難度。$encrypted就是通過加密演算法和salt算出來的密文。
接下來,描述一下這個密碼儲存的結構。
- 賬戶名:賬戶名與/etc/passwd裡面的賬戶名是一一對應的關係。
- 密碼:這裡可以看到3類,分別是奇奇怪怪的字串、*和!!其中,奇奇怪怪的字串就是加密過的密碼檔案。星號代表帳號被鎖定,雙歎號表示這個密碼已經過期了。奇奇怪怪的字串是以$6$開頭的,表明是用SHA-512加密的,$1$ 表明是用MD5加密的、$2$ 是用Blowfish加密的、$5$是用 SHA-256加密的。
- 修改日期:這個是表明上一次修改密碼的日期與1970-1-1相距的天數密碼不可改的天數:假如這個數字是8,則8天內不可改密碼,如果是0,則隨時可以改。
- 密碼需要修改的期限:如果是99999則永遠不用改。如果是其其他數字比如12345,那麼必須在距離1970-1-1的12345天內修改密碼,否則密碼失效。
- 修改期限前N天發出警告:比如你在第五條規定今年6月20號規定密碼必須被修改,系統會從距離6-20號的N天前向對應的使用者發出警告。
- 密碼過期的寬限:假設這個數字被設定為M,那麼帳號過期的M天內修改密碼是可以修改的,改了之後賬戶可以繼續使用。
- 帳號失效日期:假設這個日期為X,與第三條一樣,X表示的日期依然是1970-1-1相距的天數,過了X之後,帳號失效。
- 保留:被保留項,暫時還沒有被用上。