Go to file
2015-06-11 09:35:03 -04:00
.travis Install PyPy 2.6 on Travis 2015-06-11 09:35:03 -04:00
src Migrate to using CFFI 1.0 2015-06-11 09:23:01 -04:00
tests Migrate to using CFFI 1.0 2015-06-11 09:23:01 -04:00
.coveragerc Enable coverage testing and require 100% coverage 2014-12-05 21:24:16 -05:00
.gitignore update gitignores 2015-03-04 00:14:11 -06:00
.travis.yml Install PyPy 2.6 on Travis 2015-06-11 09:35:03 -04:00
LICENSE Initial import 2013-05-10 22:06:18 -04:00
MANIFEST.in Migrate to using CFFI 1.0 2015-06-11 09:23:01 -04:00
README.rst fixed typo 2015-03-13 21:37:04 -04:00
requirements.txt Add tests to ensure behavior 2013-05-10 23:44:58 -04:00
setup.py Migrate to using CFFI 1.0 2015-06-11 09:23:01 -04:00
tox.ini Removed usage of mock which wasn't really doing anything 2014-12-06 10:33:12 -08:00

bcrypt
======

.. image:: https://pypip.in/version/bcrypt/badge.svg?style=flat
    :target: https://pypi.python.org/pypi/bcrypt/
    :alt: Latest Version

.. image:: https://travis-ci.org/pyca/bcrypt.svg?branch=master
    :target: https://travis-ci.org/pyca/bcrypt

Modern password hashing for your software and your servers


Installation
============

To install bcrypt, simply:

.. code:: bash

    $ pip install bcrypt


Usage
-----

Basic
~~~~~

Hashing and then later checking that a password matches the previous hashed
password is very simple:

.. code:: pycon

    >>> import bcrypt
    >>> password = b"super secret password"
    >>> # Hash a password for the first time, with a randomly-generated salt
    >>> hashed = bcrypt.hashpw(password, bcrypt.gensalt())
    >>> # Check that a unhashed password matches one that has previously been
    >>> #   hashed
    >>> if bcrypt.hashpw(password, hashed) == hashed:
    ...     print("It Matches!")
    ... else:
    ...     print("It Does not Match :(")


Adjustable Work Factor
~~~~~~~~~~~~~~~~~~~~~~
One of bcrypt's features is an adjustable logarithmic work factor. To adjust
the work factor merely pass the desired number of rounds to
``bcrypt.gensalt(rounds=12)`` which defaults to 12):

.. code:: pycon

    >>> import bcrypt
    >>> password = b"super secret password"
    >>> # Hash a password for the first time, with a certain number of rounds
    >>> hashed = bcrypt.hashpw(password, bcrypt.gensalt(14))
    >>> # Check that a unhashed password matches one that has previously been
    >>> #   hashed
    >>> if bcrypt.hashpw(password, hashed) == hashed:
    ...     print("It Matches!")
    ... else:
    ...     print("It Does not Match :(")


Compatibility
-------------

This library should be compatible with py-bcrypt and it will run on Python
2.6+, 3.2+, and PyPy.

Security
--------

``bcrypt`` follows the `same security policy as cryptography`_, if you
identify a vulnerability, we ask you to contact us privately.

.. _`same security policy as cryptography`: https://cryptography.io/en/latest/security/