parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Имеет смысл использовать то, что стараются использовать в современны Юниксах...

Sumo 02.08 14:30 / 02.08 14:44

Сейчас это yescrypt, gost-yescrypt, sha512crypt и sha256crypt. Если очень хочется заморочится, то можно написать сервер на го и вкрутить какой-нибудь Argon 2, но не факт ,что это нужно в вашем случае.

Чтобы проверить поддержку в системе, можно написать программку:
#!./parser3

# https://manpages.debian.org/unstable/libcrypt-dev/crypt.5.en.html
# https://unix.stackexchange.com/questions/690679/what-does-j9t-mean-in-yescrypt-from-etc-shadow

@main[]
^for[i](1;3){
  $salt[^gen_salt(16)]
  yescrypt:      ^unsafe{^math:crypt[password1;^$y^$j9T^$$salt]}
  gost-yescrypt: ^unsafe{^math:crypt[password1;^$gy^$j9T^$$salt]}
  sha512crypt:   ^unsafe{^math:crypt[password1;^$6^$$salt]}
  sha256crypt:   ^unsafe{^math:crypt[password1;^$5^$$salt]}
  bcrypt:        ^unsafe{^math:crypt[password1;^$2b^$10]}
}

@gen_salt[len][locals]
  $alphabet[abcdefghijkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ123456789]
  $aLen(^alphabet.length[])
  $result[^for[i](1;$len){^alphabet.mid(^math:random($aLen);1)}]

@unsafe[aCode]
  $result[^try{$aCode}{$exception.handled(true)$exception.comment}]
В результате имеем:
  yescrypt:      $y$j9T$mSbgBestrnGXYeRT$./51glc28k.3SJuobV0w0gMekAo6UPJDsAFMOwKEd59
  gost-yescrypt: $gy$j9T$mSbgBestrnGXYeRT$t7nOIfZJJKp4ZkjZaEJyeuOprkjiJE4XfctLToKSus.
  sha512crypt:   $6$mSbgBestrnGXYeRT$35Fq3JgYztfXxobftFVGn6ltJnHN1G7ob7AH.9tsd.3A4B2uhy8ilVWacqVpdtHcuTmIRuVwkiCupCHdufNxs0
  sha256crypt:   $5$mSbgBestrnGXYeRT$dgzwXAK/C0LzcVuBU3s909X9aloP8hMT5xRFZAU.yN1
  bcrypt:        crypt on this platform does not support '$2b$' salt prefix


  yescrypt:      $y$j9T$tUP8nf5AN1gFZ4Pc$ALB0bWb4Mzl6deK8QH5IGRpVSmgk9UJLoY.5qD.nSn/
  gost-yescrypt: $gy$j9T$tUP8nf5AN1gFZ4Pc$lAgsr/gJ8yuczJ1Y4tk4xPnAkoojFFW5AraMa8US9FD
  sha512crypt:   $6$tUP8nf5AN1gFZ4Pc$yTmmUK72DkXOxPphnX9yCEgmxz75NP2ABDsvFNl4h2iuS.UwgDZY7C2zY7m12SJp2nGF5zS1XfDnjxvKJ9KjZ/
  sha256crypt:   $5$tUP8nf5AN1gFZ4Pc$QpKsQCKP0u/ZBNY/xA1hu1JYIGBTN11MfSfevAh3Fg6
  bcrypt:        crypt on this platform does not support '$2b$' salt prefix


  yescrypt:      $y$j9T$xRSnwDSJcrSvkjhf$P4pXgFcxoVYB9iyiezXzTO5FKtQX80m5DY9S1emHg08
  gost-yescrypt: $gy$j9T$xRSnwDSJcrSvkjhf$bfeZjJPYn7FJ8cGXcWr1lQfA72UI6GXfv83.wul2p55
  sha512crypt:   $6$xRSnwDSJcrSvkjhf$vW6OwXX6KOkylAzlygqs/UMBsasOa1m3tW4GUV3zjA/.whpMxI6u.rh.Dw4Yv8Gx2SsQFAxFm2YkI9tW1CrGM1
  sha256crypt:   $5$xRSnwDSJcrSvkjhf$1d8g.5dWcAdWXU1BGrWYF7DVX4Bl/7oXDcAjJSl8wD/
  bcrypt:        crypt on this platform does not support '$2b$' salt prefix
На моём линуксе bcrypt'а нет, а вот остальное есть. Так что имеет смысл выбрать что-то более-менее подходящее для ваших систем. Опираться на доку в man 5 crypt не стоит — в тексте упомянуты все распространённые, но что есть конкретно есть в системе надо проверять.

С параметром salt надо буть аккуратным. Парсер на любую ошибку говорит, что алгоритм не поддерживается системой, но ошика может быть в параметрах или размере соли.


p.s. Моко, может быть имеет смысл обраотать errno в math:crypt более корректно?