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.
Me gustaría fusionar esto con su pregunta. – Blender
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