本文简要介绍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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。