本文簡要介紹ruby語言中 String.crypt
的用法。
用法
crypt(salt_str) → new_str
返回通過調用 crypt(3)
標準庫函數生成的字符串,其中 str
和 salt_str
按此順序作為其參數。請不要再使用此方法。這是遺產;僅提供與早期 ruby 腳本的向後兼容性。由於以下幾個原因,在當代程序中使用它是不好的:
-
C 的
crypt(3)
的行為取決於它運行的操作係統。生成的字符串缺乏數據可移植性。 -
在某些操作係統(例如 Mac OS)上,
crypt(3)
永遠不會失敗(即默默地以意想不到的結果結束)。 -
在某些操作係統(例如 Mac OS)上,
crypt(3)
不是線程安全的。 -
crypt(3)
的所謂 “traditional” 用法非常非常弱。根據其聯機幫助頁,Linux 的傳統crypt(3)
輸出隻有 2**56 個變體;今天太容易暴力了。這是默認行為。 -
為了使事情變得健壯,一些操作係統實現了所謂的“modular”用法。要完成此操作,您必須手動對
salt_str
參數執行複雜的 build-up。未能生成正確的鹽字符串往往不會產生任何錯誤;參數中的拚寫錯誤通常是無法檢測到的。-
例如,在以下示例中,
String#crypt
的第二次調用是錯誤的;它在“round=” 中有錯字(缺少“s”)。然而,調用並沒有失敗,並且會產生一些意想不到的東西。"foo".crypt("$5$rounds=1000$salt$") # OK, proper usage "foo".crypt("$5$round=1000$salt$") # Typo not detected
-
-
即使在“modular”模式下,一些哈希函數也被認為是陳舊的,根本不再推薦;例如模塊
$1$
被其作者正式放棄:參見phk.freebsd.dk/sagas/md5crypt_eol /。對於另一個實例模塊$3$
被認為完全損壞:請參閱 FreeBSD 的聯機幫助頁。 -
在某些操作係統(例如 Mac OS)上,沒有模塊化模式。然而,如上所述,Mac OS 上的
crypt(3)
永遠不會失敗。這意味著即使您構建了一個正確的鹽字符串,它仍然會生成一個傳統的 DES 哈希,並且您無法意識到這一點。"foo".crypt("$5$rounds=1000$salt$") # => "$5fNPQMxC5j6."
如果由於某種原因您無法遷移到其他安全的現代密碼哈希算法,請安裝 string-crypt gem 和 require 'string/crypt'
以繼續使用它。
相關用法
- Ruby String.chop用法及代碼示例
- Ruby String.count用法及代碼示例
- Ruby String.capitalize用法及代碼示例
- Ruby String.center用法及代碼示例
- Ruby String.casecmp用法及代碼示例
- Ruby String.capitalize!用法及代碼示例
- Ruby String.concat用法及代碼示例
- Ruby String.chomp用法及代碼示例
- Ruby String.casecmp?用法及代碼示例
- Ruby String.chr用法及代碼示例
- Ruby String.clear用法及代碼示例
- Ruby String.match?用法及代碼示例
- Ruby String.unpack用法及代碼示例
- Ruby String.scan用法及代碼示例
- Ruby String.dump用法及代碼示例
- Ruby String.oct用法及代碼示例
- Ruby String.size用法及代碼示例
- Ruby String.scrub用法及代碼示例
- Ruby String.to_sym用法及代碼示例
- Ruby String.bytesize用法及代碼示例
- Ruby String.string <=>用法及代碼示例
- Ruby String.ascii_only?用法及代碼示例
- Ruby String.downcase用法及代碼示例
- Ruby String.length用法及代碼示例
- Ruby String.lines用法及代碼示例
注:本文由純淨天空篩選整理自ruby-lang.org大神的英文原創作品 String.crypt。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。