Skip to content

joanfont/passwords

Repository files navigation

Passwords

Build Status codecov

PHP approach to Django's password system

Usage

Basic usage

use Passwords\Hasher;
use Passwords\Helper as PasswordHelper;

PasswordHelper::registerHasher(new Hasher\PBKDFSHA512(10000));
$password = PasswordHelper::make('my-awesome-password', 'my-awesome-salt');

PasswordHelper::check('my-awesome-password', 'PBKDF2SHA512$10000$my-awesome-salt$c25c4933b6dc9a9717813b4e7d1c5269d8bb81aea2730470faa538f0abdb6097068fc34d03362441f03a2d47cd157c6168d26a47a246af5b4e855dd9b2c1a068');

Register multiple hashers

use Passwords\Hasher;
use Passwords\Helper as PasswordHelper;

$default_hasher = new Hasher\PBKDF2SHA512(10000);
PasswordHelper::setDefaultHasher($default_hasher);

PasswordHelper::registerHasher($default_hasher);
PasswordHelper::registerHasher(new Hasher\SHA1);

If no default hasher is provided, first hasher registered will be used as default.

Make your custom hasher

Please do not use in production in any purpose.

use Password\Hasher\Hasher;

class MyAwesomeHasher extends Hasher 
{
  const NAME = 'MyAwesomeHasher';
  
  public function encode(string $raw, ?string $salt): string
  {
    return strrev($raw);
  }
}

Usage

use Password\Helper as PasswordHelper;

PasswordHelper::registerHasher(new MyAwesomeHasher);
// Salt doesn't matter with this hasher
$password = PasswordHelper::make('my-awesome-password', null);

PasswordHelper::check('my-awesome-password', 'MyAsweomeHasher$$$drowssap-emosewa-ym');

Testing

make install
make test

Credits