我想生成 SHA512 散列密码以直接包含到 /etc/shadow 文件中,以便与厨师的用户资源一起使用。通常我会为此去stdlib的Digest
库,但它不会以正确的格式生成哈希:
ruby-1.9.2-p136 :001 > require 'digest/sha2'
=> true
ruby-1.9.2-p136 :002 > Digest::SHA512.hexdigest('test')
=> "ee26b0dd4af7e749aa1a8ee3c10ae9923f618980772e473f8819a5d4940e0db27ac185f8a0e1d5f84f88bc887fd67b143732c304cc5fa9ad8e6f57f50028a8ff"
影子文件想要的格式是:
$6$/ShPQNXV$HJnibH9lw01qtYqyJQiBf81ggJB2BGUvKA7.kv39HGCeE.gD4C/SS9zAf5BrwOv3VJzvl99FpHYli9E8jykRC0
我看过的东西:
- openssl "dgst" 模块返回与 .hexdigest 相同的格式,并且它的 "passwd" 模块不包括 SHA512 支持。
- String#crypt,但不支持 SHA512。(编辑:这只是在 OSX 上的情况——如果您指定“$6$somesalt”作为盐,现代 Linux 发行版将工作)
- ruby-crypt gem,但它不支持 SHA512
相比之下,返回正确格式的东西是 PHP 的crypt,但我宁愿不必为应该简单的东西执行 PHP。