Использование ruby ​​для генерации хэшей в стиле шифрования SHA512, отформатированных для / etc / shadow? - PullRequest
7 голосов
/ 02 марта 2011

Я хочу создать хешированные пароли 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 - современные дистрибутивы Linux будут работать, если вы укажете "$ 6 $ somesalt" в качестве соли)
  • ruby-crypt gem, но он не поддерживаетSHA512

Для сравнения, что-то, что возвращает правильный формат, это PHP crypt , но я бы предпочел не запускать PHP для чего-то, что должно быть простым.

1 Ответ

6 голосов
/ 03 марта 2011

После дальнейших исследований:

  • Команда mkpasswd, которая в debian входит в пакет whois (странный):

    mkpasswd -m sha-512

  • String # crypt действительно вызывает собственный вызов crypt () платформы, однако OSX (до 10.6) не включает поддержку альтернативных шифров.«password» .crypt ('$ 6 $ somesalt') будет работать на платформах Linux.

...