#!/usr/bin/env python """ Generate a password hash, suitable for /etc/shadow Inspired by this code from OpenStack: https://github.com/openstack/nova/blob/stable/grizzly/nova/virt/disk/api.py#L549 Usage: mkpasswd [--algo=] Options: --algo= One of: SHA-512, SHA-256, MD5, DES [default: SHA-256] """ from docopt import docopt import crypt import random def generate_salt(): salt_set = ('abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' '0123456789./') salt = 16 * ' ' return ''.join([random.choice(salt_set) for c in salt]) def main(passwd, algo): # encryption algo - id pairs for crypt() algos = {'SHA-512': '$6$', 'SHA-256': '$5$', 'MD5': '$1$', 'DES': ''} salt = generate_salt() result = crypt.crypt(passwd, algos[algo] + salt) return result if __name__ == '__main__': args = docopt(__doc__) pw = main(passwd=args[''], algo=args['--algo']) print pw