【问题标题】:Using ruby to generate SHA512 crypt-style hashes formatted for /etc/shadow?使用 ruby​​ 生成格式为 /etc/shadow 的 SHA512 crypt-style hashes?
【发布时间】:2013-02-23 00:03:27
【问题描述】:

我想生成 SHA512 散列密码以直接包含在 /etc/shadow 文件中,以便与 chef's user resource 一起使用。通常我会为此访问 stdlib 的 Digest 库,但它不会以正确的格式生成哈希:

ruby-1.9.2-p136 :001 > require 'digest/sha2'
 => true 
ruby-1.9.2-p136 :002 > Digest::SHA512.hexdigest('test')
 => "ee26b0dd4af7e749aa1a8ee3c10ae9923f618980772e473f8819a5d4940e0db27ac185f8a0e1d5f84f88bc887fd67b143732c304cc5fa9ad8e6f57f50028a8ff" 

shadow文件想要的格式是:

$6$/ShPQNXV$HJnibH9lw01qtYqyJQiBf81ggJB2BGUvKA7.kv39HGCeE.gD4C/SS9zAf5BrwOv3VJzvl99FpHYli9E8jykRC0

我看过的东西:

  • openssl“dgst”模块返回与 .hexdigest 相同的格式,其“passwd”模块不支持 SHA512。
  • String#crypt,但不支持 SHA512。 (编辑:只有在 OSX 上才会出现这种情况——如果您指定“$6$somesalt”作为盐,现代 Linux 发行版将可以工作)
  • ruby-cryptgem,但是不支持SHA512

为了比较,确实返回正确格式的东西是 PHP 的 crypt,但我宁愿不必为应该简单的东西执行到 PHP。

【问题讨论】:

    标签: ruby encryption passwords sha crypt


    【解决方案1】:

    经过进一步研究:

    • mkpasswd 命令,在 debian 上位于 whois 包中(奇怪):

      mkpasswd -m sha-512

    • String#crypt 确实调用了平台的本机 crypt() 调用,但是 OSX(最高 10.6)不包括对备用密码的支持。 "password".crypt('$6$somesalt') 适用于 Linux 平台。

    【讨论】:

    猜你喜欢
    • 2020-09-23
    • 2014-11-29
    • 2019-05-08
    • 1970-01-01
    • 1970-01-01
    • 2020-07-04
    • 1970-01-01
    • 2023-03-08
    相关资源
    最近更新 更多