Linux crypt函數的使用

來源:互聯網
上載者:User
crypt函數用來加密,目前Linux平台上加密的方法大致有MD5, DES, 3 DES

在RedHat平台上MD5和DES用的多一些。crypt函數的原形是:

char *crypt(const char *key, const char *salt);

key就是我們要傳入的明文,salt是我們指定用來加密的密鑰,傳回值就是加密後的密文。

關鍵就是這個密鑰salt,這裡通過我們的實驗,發現:

(1)salt這個字串如果以$1$開頭,以$結尾,那麼這表示讓crypt用MD5的方式加密,加密後出來的密文格式就是 $1$...$<密文本文> ,夾在$1$和$之間的字串就是我們指定的密鑰文字。這個密鑰文字最多不能超過8個字元。

在EasyCluster的一些安裝配置指令碼中,我們就是用了這種加密方式,取出原生MAC地址,然後用我們定義好的一個祕密金鑰加密,加密完成後 將密文中$1$...$這部分去掉,只保留後面的密文在license檔案中,這樣別人就不知道我們用什麼密鑰進行了加密,就算知道我們是針對MAC地址 加密的,但是由於不知道密鑰是什麼,所以還是安全的。(當然,破解者可以看我們驗證license的彙編代碼,一樣能看到,HOHO)

(2)如果salt字串不是(1)方式的格式,那預設就用DES加密方法。DES加密時,salt只能取兩個字元,也就是說,salt最多不能 超過2個字元,多出的字元會被丟棄。(SuSE上的3 DES不清楚是怎麼一個約定),用DES加密出來的密文前兩個字元就是密鑰。後面緊跟著的就是真正的密文。

在使用crypt函數的時候,在代碼的開頭,要定義這個常量:

#define _XOPEN_SOURCE

具體可以看man 3 crypt,這個常量的含義,在APUE第二章講的很清楚。如果不定義這個常量,在有些Linux上沒問題,但是在有些Linux上,就會出現crypt返回null 指標的錯誤

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.