# New Application Quickstart Guide

Need to quickly get password hash support added into your new application, but don’t have time to wade through pages of documentation, comparing and contrasting all the different schemes? Then read on…

## Creating and Using a CryptContext

Once you’ve chosen what password hash(es) you want to use, the next step is to define a `CryptContext` object to manage your hashes and related policy configuration. Insert the following code into your application:

    #
    # import the CryptContext class, used to handle all hashing...
    #
    from passlib.context import CryptContext

    #
    # create a single global instance for your app...
    #
    pwd_context = CryptContext(
        # Replace this list with the hash(es) you wish to support.
        # this example sets pbkdf2_sha256 as the default,
        # with additional support for reading legacy des_crypt hashes.
        schemes=["pbkdf2_sha256", "des_crypt"],

        # Automatically mark all but first hasher in list as deprecated.
        # (this will be the default in Passlib 2.0)
        deprecated="auto",

        # Optionally, set the number of rounds that should be used.
        # Appropriate values may vary for different schemes,
        # and the amount of time you wish it to take.
        # Leaving this alone is usually safe, and will use passlib's defaults.
        ## pbkdf2_sha256__rounds = 29000,
        )

To start using your CryptContext, import the context you created wherever it’s needed:

    >>> # import context from where you defined it...
    >>> from myapp.model.security import pwd_context

    >>> # hashing a password...
    >>> hash = pwd_context.hash("somepass")
    >>> hash
    '$pbkdf2-sha256$29000$BSBkLEXIeS9FKMW4F.I85w$SJMzqVU7fw49NDOJZHt2o9vKIfDUVM4cKlAD4MxIgD0'

    >>> # verifying a password...
    >>> pwd_context.verify("somepass", hash)
    True
    >>> pwd_context.verify("wrongpass", hash)
    False

There’s many more features packed into the context objects, read the walkthrough for more…

See also

- CryptContext Tutorial – full details of using the CryptContext class

- `passlib.context` – CryptContext API reference

- `passlib.hash` – list of all hashes supported by Passlib.

Footnotes

[1]

As of June 2016, the most commonly used password hashes are BCrypt and PBKDF2, followed by SHA512-Crypt, with Argon2 rapidly moving up the ranks. You should make sure you are reading a current copy of the Passlib documentation, in case the state of things has changed.