使用ruby生成为/etc/shadow格式化的SHA512 crypt样式哈希?

使用ruby生成为/etc/shadow格式化的SHA512 crypt样式哈希?,ruby,encryption,passwords,sha,crypt,Ruby,Encryption,Passwords,Sha,Crypt,我想生成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') => "ee26b0dd4af7e749aa1a8ee3c10ae9923f61

我想生成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支持
  • 字符串#crypt,但它不支持SHA512。(编辑:这只是OSX上的情况——如果您指定“$6$somesalt”作为salt,那么现代Linux发行版将起作用)
  • gem,但它不支持SHA512

作为比较,返回正确格式的东西是PHP的,但我不想为了简单的东西而执行PHP。

进一步研究后:

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

    mkpasswd-m sha-512

  • String#crypt实际上调用平台的原生crypt()调用,但是OSX(高达10.6)不支持备用密码。“密码”。crypt('6$somesalt')将在Linux平台上工作


我想把这个问题和你的问题结合起来。如果你对原生ruby解决方案感兴趣: