当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Ruby String.crypt用法及代码示例


本文简要介绍ruby语言中 String.crypt 的用法。

用法

crypt(salt_str) → new_str

返回通过调用 crypt(3) 标准库函数生成的字符串,其中 strsalt_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-lang.org大神的英文原创作品 String.crypt。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。