wonderbeyond
11/29/2016 - 1:24 AM

Python function to get random string(Refer to django.utils.crypto.get_random_string)

Get a secret random string in python(Refer to django.utils.crypto.get_random_string)

import random
import hashlib
import time


def get_random_string(length=12,
                      allowed_chars='abcdefghijklmnopqrstuvwxyz'
                      'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'):
    """
    See also:
        https://github.com/rs/xid (globally unique id generator)
        https://stackoverflow.com/questions/41354205/how-to-generate-a-unique-auth-token-in-python
        https://docs.python.org/3/whatsnew/3.6.html#secrets
    """
    random.seed(
        hashlib.sha256(
            ("%s%s%s" % (
                random.getstate(),
                time.time(),
                'O_O-SECRET_KEY')).encode('utf-8')
        ).digest())
    return ''.join(random.choice(allowed_chars) for i in range(length))
import os
import binascii
import uuid
from xid import Xid


def get_guid(style='uuid'):
    """Get a globally unique string for identify things"""
    if style == 'uuid':
        return uuid.uuid4().hex

    if style == 'xid':
        return Xid().string()

    raise RuntimeError('Unsupported guid style: {0}'.format(style))


# Equivalent implementation
def get_guid():
    return binascii.hexlify(os.urandom(16)).decode()