2011-03-02 13 views
6

Quiero generar contraseñas hash SHA512 para su inclusión directamente en un archivo/etc/shadow para usar con chef's user resource. Normalmente me gustaría ir a la biblioteca del stdlib Digest para esto, pero no genera el hash en el formato correcto:Usando ruby ​​para generar hashes SHA512 crypt-style formateados para/etc/shadow?

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

El formato que el archivo de sombra quiere es:

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

cosas he mirado en:

  • OpenSSL "DGST" módulo devuelve el mismo formato que .hexdigest, y su módulo "passwd" no incluye soporte SHA512.
  • String # crypt, pero eso no es compatible con SHA512. (Edit: esto es sólo el caso en OSX - modernas distribuciones de Linux funcionarán si especifica "$ 6 $ somesalt" como la sal)
  • ruby-crypt joya, pero no soporta SHA512

Para la comparación, algo que devuelve el formato correcto es PHP crypt, pero prefiero no tener que ejecutar PHP para algo que debería ser simple.

Respuesta

5

Después de la investigación adicional:

  • El comando mkpasswd, que en Debian está en el paquete whois (raro):

    mkpasswd -m sha-512

  • Cadena # cripta hace realmente llama a la llamada cripta nativa de la plataforma, sin embargo, OSX (hasta 10.6) no incluye soporte para cifras alternativas. "password" .crypt ('$ 6 $ somesalt') funcionará en plataformas Linux.

+0

Me gustaría fusionar esto con su pregunta. – Blender

+0

estaría interesado en una solución de rubí nativa: http://stackoverflow.com/questions/9043017/how-to-convert-php-crypt-function-sha512-to-ruby – c33s

Cuestiones relacionadas