2015-11-19 2 views
3

Я пытаюсь создать зашифрованные строки паролей, похожие на/etc/shadow в Linux. По какой-то причине выход, который я получаю, отличается. Любые идеи, что я пропущу, и одна из них длиннее, чем другая (не считая солевой части)?Python SHA512 соленые пароли crypt на MacOS X

#!/usr/bin/python 
import crypt 

alg = 6 # SHA512 
salt = 'vb1tLY1qiY' 
word = 'password' 

insalt = '${}${}$'.format(alg, salt) 

cryptWord = crypt.crypt(word, insalt) 
print cryptWord 

Выход: $6FMi11BJFsAc

Если я произвожу это в Linux так:

mkpasswd --method=sha-512 --salt=vb1tLY1qiY password 

Выход: $6$vb1tLY1qiY$WFHTa6CRShEuKg63vuPTYOVRK1oQiM6johIEs2JslF1904VhEdSXlHje74eB4uLXHrKNyZ4bPjSlWpZD6qIo71

+0

не может дублировать. Я запустил ваш скрипт python на 2.7.6 и3.4.3. Оба выпускали тот же полный выход, что и 'mkpasswd'. – tdelaney

+0

@tdelaney попробуйте в Python 3 на http://repl.it, вы получите короткий ответ от 'crypt.crypt ('password', '$ 6 $ vb1tLY1qiY $')' – TessellatingHeckler

+0

@TessellatingHeckler ничего себе, вы правы. Прекрасно работает на моем рабочем столе. Цвет меня смутил. – tdelaney

ответ

0

Я был в состоянии использовать passlib. Он не устанавливается как часть python (по крайней мере, в OS X), но вы можете установить его через pip.

sudo easy_install pip 
pip install passlib 
python -c "from passlib.hash import sha512_crypt; import getpass,string,random; print sha512_crypt.using(salt=''.join([random.choice(string.ascii_letters + string.digits) for _ in range(16)]),rounds=5000).hash(getpass.getpass())" 

https://gist.github.com/hbeatty/25db5847e7068335681db88248d0deaf

Смежные вопросы