2009-07-19 82 views
0
crypt(text,"k7") 

我查了一下,顯然'k7'是鹽,但我不知道這意味着什麼,也不知道輸出的類型是什麼,任何人都知道?crypt()在C中做什麼?

+2

-1因此SO不能代替手冊頁 – Nifle 2009-07-19 10:21:54

回答

8

crypt Man page

說明

隱窩()是密碼加密 功能。它基於數據 加密標準算法 旨在(其他 東西)阻止使用硬件 實現的關鍵字搜索。

鍵是用戶輸入的密碼。

鹽是從集合[a-zA-Z0-9./]選擇的兩個字符的字符串 。這個 字符串用於以4096種不同方式之一擾亂算法。

+4

+1,因爲它是準確的,並且可以在描述算法的實際句子中使用「perturb」這個詞... – 2009-07-19 04:12:25

+3

它應該交給手冊頁的作者,但謝謝! – 2009-07-19 06:57:27

1

正如Randolpho指出的那樣,這是對文本的單向哈希處理。

crypt()的標準用法是存儲密碼。顯然,將密碼存儲爲明文將非常不方便。相反,crypt()用於生成密碼的散列。當你輸入你的密碼時,crypt()應用於該密碼,然後比較兩個哈希值。

本質上,crypt()的功能是將文本翻譯成一些新的文本,從中不能恢復原始文本,但對兩個不同的密鑰生成相同散列的概率較低。

0

C Manual - Crypt

crypt函數需要一個密碼,密鑰,作爲一個字符串,以及在下面描述,並返回其與另一種鹽開始打印的ASCII字符串鹽字符數組。相信在給定函數的輸出的情況下,找到產生該輸出的密鑰的最佳方式是猜測密鑰的值,直到找到密鑰的原始值。

8

所有其他答案都是正確的,但到目前爲止沒有人解釋過爲什麼鹽在那裏。

維基百科在saltsRainbow Tables上有一個很好的頁面,這是我們有鹽的主要原因。

沒有鹽,crypt基本上只是一個單向哈希函數。它需要一個密碼並返回該密碼的哈希版本。 Rainbow表提供了一種優化方法,用於擊敗此散列的「單向」特性,並取消原始密碼。

如果您設法獲取散列密碼(通過某些數據庫利用或訪問/etc/passwd/etc/shadow文件),理論上可以知道很多人的密碼。

鹽會增加額外的「隨機」因素。你需要創建一個隨機salt並將其存儲在某個地方(密碼是OK,但單獨更好)。現在只有一組彩虹桌是不夠的,你突然需要65,536套這樣的桌子(如果是雙字節鹽的話)。鹽也可以與密碼分開,增加額外的障礙。

鹽還有助於防止用戶使用相同的密碼看起來像擁有相同的密碼;鹽通常是隨機選擇的,如果鹽不同,那麼哈希密碼將會有很大不同。

我還會指出這個博客文章解釋了一些password basics,我發現它非常翔實。

+0

@VladimirF,在這個答案中,你的意思是「鹽」這個詞嗎? – Mamun 2018-01-04 14:10:27