回答
說明
隱窩()是密碼加密 功能。它基於數據 加密標準算法 旨在(其他 東西)阻止使用硬件 實現的關鍵字搜索。
鍵是用戶輸入的密碼。
鹽是從集合[a-zA-Z0-9./]選擇的兩個字符的字符串 。這個 字符串用於以4096種不同方式之一擾亂算法。
+1,因爲它是準確的,並且可以在描述算法的實際句子中使用「perturb」這個詞... – 2009-07-19 04:12:25
它應該交給手冊頁的作者,但謝謝! – 2009-07-19 06:57:27
Wikipedia FTW
底線:它單向散列text
正如Randolpho指出的那樣,這是對文本的單向哈希處理。
crypt()的標準用法是存儲密碼。顯然,將密碼存儲爲明文將非常不方便。相反,crypt()用於生成密碼的散列。當你輸入你的密碼時,crypt()應用於該密碼,然後比較兩個哈希值。
本質上,crypt()的功能是將文本翻譯成一些新的文本,從中不能恢復原始文本,但對兩個不同的密鑰生成相同散列的概率較低。
crypt函數需要一個密碼,密鑰,作爲一個字符串,以及在下面描述,並返回其與另一種鹽開始打印的ASCII字符串鹽字符數組。相信在給定函數的輸出的情況下,找到產生該輸出的密鑰的最佳方式是猜測密鑰的值,直到找到密鑰的原始值。
所有其他答案都是正確的,但到目前爲止沒有人解釋過爲什麼鹽在那裏。
維基百科在salts和Rainbow Tables上有一個很好的頁面,這是我們有鹽的主要原因。
沒有鹽,crypt基本上只是一個單向哈希函數。它需要一個密碼並返回該密碼的哈希版本。 Rainbow
表提供了一種優化方法,用於擊敗此散列的「單向」特性,並取消原始密碼。
如果您設法獲取散列密碼(通過某些數據庫利用或訪問/etc/passwd
或/etc/shadow
文件),理論上可以知道很多人的密碼。
鹽會增加額外的「隨機」因素。你需要創建一個隨機salt並將其存儲在某個地方(密碼是OK,但單獨更好)。現在只有一組彩虹桌是不夠的,你突然需要65,536套這樣的桌子(如果是雙字節鹽的話)。鹽也可以與密碼分開,增加額外的障礙。
鹽還有助於防止用戶使用相同的密碼看起來像擁有相同的密碼;鹽通常是隨機選擇的,如果鹽不同,那麼哈希密碼將會有很大不同。
我還會指出這個博客文章解釋了一些password basics,我發現它非常翔實。
@VladimirF,在這個答案中,你的意思是「鹽」這個詞嗎? – Mamun 2018-01-04 14:10:27
- 1. '@'在c#中做什麼?
- 2. typedef在C++中做什麼
- 3. 在C中,'''做什麼?
- 4. C [a]在C中做什麼?
- 5. 在Perl中做什麼=〜做什麼?
- 6. 我在做什麼錯? (C)
- 7. 爲什麼鹽被包含在用C crypt函數哈希
- 8. extern在目標C中做了什麼?
- 9. 「malloc」在C/MPI中做什麼?
- 10. 「12345」+ 2在C中做了什麼?
- 11. out [i] = *(a_mat + i)在C中做什麼?
- 12. MAX在Objec-C/cocos2d中做了什麼?
- 13. @class在Objective-C中做什麼?
- 14. arraylist IndexOf在asp.net/c#中做了什麼?
- 15. *在C中做什麼符號?
- 16. 在c#中^字符做了什麼?
- 17. 「| =」運算符在C#中做什麼?
- 18. 在C#中,'| ='是做什麼的?
- 19. 什麼是.1文件在Object-C編程中做什麼?
- 20. 什麼是「?」。運算符在C#中做什麼?
- 21. 什麼::(成員方法名稱)在C++中做什麼
- 22. 這是什麼(C/C++)程序在做什麼?
- 23. C++:&rand做了什麼?
- 24. C++迭代器做什麼?
- 25. 命令'c ..'做什麼?
- 26. 什麼是C#代碼做:
- 27. 爲什麼PHP crypt()會在salt中加入哈希值?
- 28. 什麼是string.indexOf(「*。」)在Javascript中做什麼?
- 29. 什麼是outData.writeInt()在Java中做什麼?
- 30. 什麼(數組)在PHP中做什麼?
-1因此SO不能代替手冊頁 – Nifle 2009-07-19 10:21:54