Erlang 512 хеш не соответствует Python 512 хеш - PullRequest
2 голосов
/ 26 сентября 2019

Я пытаюсь продублировать следующий код Python на Erlang:

python -c "import random,string,crypt;
print crypt.crypt('example', '\$6\$5H0QpwprRiJQR19Y\$')"

OUTPUT: $6$5H0QpwprRiJQR19Y$B8EBtKxKU4Poxi.qLsL/t7uoriHX/cdnn9kT7kTsUIvwKPR6oJLOl8NAH8vPT.BNPdEY7a4.rz8YhziecWQ6I/

Из чтения онлайн:

  • $ 6 $ указывает, что это хэш 512
  • '5H0QpwprRiJQR19Y' - это соль для хэша
  • в приведенном выше коде парольная фаза 'example'

Мой текущий код erlang ниже:


crypto:hash(sha512, "example5H0QpwprRiJQR19Y")

Который производит:

<<167,181,70,20,213,141,24,28,86,204,170,121,182,75,217,3,51,222,3,209,44,43,34,243,130,214,247,156,149,150,162,81,200,207,103,85,60,202,37,189,30,25,128,221,61,79,146,86,225,126,35,85,4,161,156,152,8,6,90,17,207,229,235,241>>

Я пытался манипулировать возвратом, но не могу заставить их соответствовать.

1 Ответ

1 голос
/ 26 сентября 2019

Я не смог найти реализацию crypt в Erlang, только обертки, такие как this .Обычно языки более низкого уровня, такие как C, лучше справляются с задачей повторного хеширования, чем языки более высокого уровня, такие как Erlang.Таким образом, использование этого гарантирует совместимость и является более быстрым, чем реализация его самостоятельно.

Если вы хотите реализовать это самостоятельно, то вы можете, используя спецификацию здесь .Обратите внимание, что это один из самых дерьмовых хэшей паролей, который нужно понять и реализовать, так что это, вероятно, не для непосвященных.Вам лучше просто взять существующий код с другого языка и перевести его.

...