Fast PBKDF2 for Python 2.6 - 3.4
Project description
This is a backport of hashlib.pbkdf2_hmac for Python 2.6 to 2.7. The implementation comes with a pure Python implementation and a C module that depends on OpenSSL. The C code does not wrap PKCS5_PBKDF2_HMAC as its implementation is suboptimal.
Usage
>>> from backports.pbkdf2 import pbkdf2_hmac, compare_digest >>> dkey = pbkdf2_hmac('sha1', passwordbytes, saltbytes, iterations=100000) >>> compare_digest(dkey, originalkey) True
pbkdf2_hmac(hash_name, password, salt, iterations, dklen=None)
- hash_name
- name of the digest algorithm as string
- password
- password as bytes, bytearray or bytes-like object (*)
- salt
- salt as bytes, bytearray or bytes-like object (*). The salt should be generated with a CPRNG like os.urandom(). You should never use random.random(). About 16 bytes seem to be a good choice.
- iterations
- number of rounds, 100,000 rounds of SHA-1 take about 30ms on a modern CPU.
- dklen
- length of the derived key (defaults to digest_size)
- returns
- derived key as bytes
(*) bytearray and bytes-like objects are not supported on Python 2.6
Benchmarks
password length | 10 | 100 | 500 | 1000 |
---|---|---|---|---|
backports.pbkdf2 C | 0.314 | 0.321 | 0.310 | 0.310 |
backports.pbkdf2 Py | 0.838 | 0.847 | 0.853 | 0.913 |
pbkdf2_ctypes 0.99.3 | 0.554 | 0.663 | 0.954 | 1.344 |
pbkdf2 1.3 | 5.235 | 5.746 | 6.155 | 6.450 |
Django pbkdf2 1.5.4 | 1.976 | 2.430 | 2.676 | 3.078 |
PyCrypto 2.6.1 | 6.903 | 9.062 | 9.518 | 10.274 |
- algorithm
- sha1
- rounds
- 50000
- dklen
- 20
- saltlen
- 16
- number of runs per test
- 10
- Python
- Python 3.3 on Linux AMD64
- CPU
- Intel i7-2860QM @ 2.50GHz
Changelog
pbkdf2 0.1
Release date: 19-Oct-2013
- initial release of backports.pbkdf2
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
backports.pbkdf2-0.1.tar.gz
(9.9 kB
view hashes)