Skip to main content

A python implementation of PwdHash 1 and 2

Project description

PwdHash 1 and 2, in Python

This is a Python implementation of PwdHash and PwdHash2, accessible from the command line.

It is function-equivalent to the original PwdHash browser add-on, as well as the updated version.

Installation

pip install pwdhash

Usage

Once installed with pip, pwdhash and pwdhash2 commands should be available in the PATH.

pwdhash

 pwdhash -h
usage: pwdhash [-h] [-s] [-c] [-n] domain

Computes PwdHash1

positional arguments:
  domain       the domain or uri of the site

optional arguments:
  -h, --help   show this help message and exit
  -s, --stdin  Get password from stdin instead of prompt. Default is prompt
  -c, --copy   Copy hash to clipboard instead of displaying it. Default is display
  -n           Do not print the trailing newline

pwdhash2

 pwdhash2 -h
usage: pwdhash2 [-h] [-s] [-c] [-n] [--salt SALT] [--iterations ITERATIONS] domain

Computes PwdHash2

positional arguments:
  domain                the domain or uri of the site

optional arguments:
  -h, --help            show this help message and exit
  -s, --stdin           Get password from stdin instead of prompt. Default is prompt
  -c, --copy            Copy hash to clipboard instead of displaying it. Default is display
  -n                    Do not print the trailing newline
  --salt SALT           Salt
  --iterations ITERATIONS
                        How many iterations

python pwdhash.py

If sources are available, the script can also be called with python pwdhash.py or ./pwdhash.py.

 python pwdhash.py -h
usage: pwdhash.py [-h] [-s] [-c] [-n] [-v {1,2}] [--salt SALT] [--iterations ITERATIONS] domain

Computes PwdHash1 or PwdHash2

positional arguments:
  domain                the domain or uri of the site

optional arguments:
  -h, --help            show this help message and exit
  -s, --stdin           Get password from stdin instead of prompt. Default is prompt
  -c, --copy            Copy hash to clipboard instead of displaying it. Default is display
  -n                    Do not print the trailing newline
  -v {1,2}, --version {1,2}
                        Use PwdHash 1 or 2. Default is 1
  --salt SALT           Salt
  --iterations ITERATIONS
                        How many iterations

PwdHash Examples

Domain name is required as an argument, and password is entered in a prompt, without being displayed :

 pwdhash example.com
Password: 
4kydhtBD9M

--stdin

It's possible to get the password from standard input. It displays the password if entered by the user:

 pwdhash --stdin example.com
p4ssw0rd
4kydhtBD9M

but it allows to get the password from a pipe or a file:

 pwdhash --stdin example.com < password
4kydhtBD9M
❯ cat password | pwdhash --stdin example.com
4kydhtBD9M
❯ echo "p4ssw0rd" | pwdhash --stdin example.com
4kydhtBD9M

--copy

It's possible to copy the password directly to the clipboard. It requires the pyperclip module. The password isn't displayed at all.

 pwdhash --stdin --copy example.com < password

-n

Passwords can also be displayed without trailing newline:

 pwdhash --stdin example.com -n < password
4kydhtBD9M%

PwdHash2 Examples

 pwdhash2 example.com
Exception: Please define 'PWDHASH2_SALT' environment variable, or specify --salt.

PwdHash2 requires a Salt:

 pwdhash2 example.com --salt ChangeMe
Exception: Please define 'PWDHASH2_ITERATIONS' environment variable, or specify --iterations.

and a number of iterations:

 pwdhash2 example.com --salt ChangeMe --iterations 50000
Password:
7qErBOIB6R
❯ pwdhash2 example.com --salt ChangeMe --iterations 50000 --stdin < password
7qErBOIB6R

Environment variables

Salt and Iterations can also be specified as environment variables:

 PWDHASH2_SALT=ChangeMe PWDHASH2_ITERATIONS=50000 pwdhash2 example.com --stdin < password
7qErBOIB6R

If you define those variables inside your .bashrc or .zshrc, you don't need to specify them anymore:

 pwdhash2 example.com --stdin < password
7qErBOIB6R

Call from Python script

import pwdhash

print(pwdhash.extract_domain('https://subdomain.example.com/folder'))
# example.com

print(pwdhash.pwdhash('example.com', 'p4ssw0rd'))
# 4kydhtBD9M

print(pwdhash.pwdhash2('example.com', 'p4ssw0rd', 50_000, 'ChangeMe'))
# 7qErBOIB6R

Tests

 pytest -v
================================= test session starts ==================================
collected 15 items

test_pwdhash.py::TestPwdHash::test_empty_pwdhash PASSED                                        [  6%]
test_pwdhash.py::TestPwdHash::test_pwdhash1_with_domains PASSED                                [ 13%]
test_pwdhash.py::TestPwdHash::test_pwdhash1_with_urls PASSED                                   [ 20%]
test_pwdhash.py::TestPwdHash::test_pwdhash1_with_utf8 PASSED                                   [ 26%]
test_pwdhash.py::TestPwdHash2::test_pwdhash2_collisions PASSED                                 [ 33%]
test_pwdhash.py::TestPwdHash2::test_pwdhash2_edge_cases PASSED                                 [ 40%]
test_pwdhash.py::TestPwdHash2::test_pwdhash2_with_urls PASSED                                  [ 46%]
test_pwdhash.py::TestPwdHashCLI::test_cli_pwdhash PASSED                                       [ 53%]
test_pwdhash.py::TestPwdHashCLI::test_cli_pwdhash2 PASSED                                      [ 60%]
test_pwdhash.py::TestPwdHashCLI::test_cli_pwdhash_to_clipboard PASSED                          [ 66%]
test_pwdhash.py::TestPwdHashCLI::test_pwdhash_v1_script PASSED                                 [ 73%]
test_pwdhash.py::TestPwdHashCLI::test_pwdhash_v2_script PASSED                                 [ 80%]
test_pwdhash.py::TestInteractivePwdHash::test_input_password PASSED                            [ 86%]
test_pwdhash.py::TestInteractivePwdHash::test_input_password_no_newline PASSED                 [ 93%]
test_pwdhash.py::TestInteractivePwdHash::test_input_password_v2 PASSED                         [100%]

================================== 9 passed in 0.46s ===================================

Authors

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pwdhash-0.0.8.tar.gz (6.4 kB view details)

Uploaded Source

Built Distribution

pwdhash-0.0.8-py3-none-any.whl (6.8 kB view details)

Uploaded Python 3

File details

Details for the file pwdhash-0.0.8.tar.gz.

File metadata

  • Download URL: pwdhash-0.0.8.tar.gz
  • Upload date:
  • Size: 6.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.9.7

File hashes

Hashes for pwdhash-0.0.8.tar.gz
Algorithm Hash digest
SHA256 01fcacac4abced0bcc1cd4a13e4e64ff3a247a501b068c7aedac178e91fba19b
MD5 77629270017c2add4f9f5bc0c05ea386
BLAKE2b-256 45aa433a40b585a02840953bbc1758960ba515a716c38d994e8225c367a312c7

See more details on using hashes here.

File details

Details for the file pwdhash-0.0.8-py3-none-any.whl.

File metadata

  • Download URL: pwdhash-0.0.8-py3-none-any.whl
  • Upload date:
  • Size: 6.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.9.7

File hashes

Hashes for pwdhash-0.0.8-py3-none-any.whl
Algorithm Hash digest
SHA256 1db4863ceaf46721f5a726880e04db73b16f2ec7c8f667cbe80186157b62de38
MD5 1e3dea677ecfaf114544064f0846d9b3
BLAKE2b-256 545fae3a851bf5aa37457d12f5f970547c0952b00b43f6d144219fc06c12de61

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page