MediaWiki REL1_33
BcryptPassword.php
Go to the documentation of this file.
1<?php
32 protected function getDefaultParams() {
33 return [
34 'rounds' => $this->config['cost'],
35 ];
36 }
37
38 protected function getDelimiter() {
39 return '$';
40 }
41
42 protected function parseHash( $hash ) {
43 parent::parseHash( $hash );
44
45 $this->params['rounds'] = (int)$this->params['rounds'];
46 }
47
54 public function crypt( $password ) {
55 if ( !defined( 'CRYPT_BLOWFISH' ) ) {
56 throw new MWException( 'Bcrypt is not supported.' );
57 }
58
59 // Either use existing hash or make a new salt
60 // Bcrypt expects 22 characters of base64-encoded salt
61 // Note: bcrypt does not use MIME base64. It uses its own base64 without any '=' padding.
62 // It expects a 128 bit salt, so it will ignore anything after the first 128 bits
63 if ( !isset( $this->args[0] ) ) {
64 $this->args[] = substr(
65 // Replace + with ., because bcrypt uses a non-MIME base64 format
66 strtr(
67 // Random base64 encoded string
69 '+', '.'
70 ),
71 0, 22
72 );
73 }
74
75 $hash = crypt( $password,
76 sprintf( '$2y$%02d$%s', (int)$this->params['rounds'], $this->args[0] ) );
77
78 if ( !is_string( $hash ) || strlen( $hash ) <= 13 ) {
79 throw new PasswordError( 'Error when hashing password.' );
80 }
81
82 // Strip the $2y$
83 $parts = explode( $this->getDelimiter(), substr( $hash, 4 ) );
84 $this->params['rounds'] = (int)$parts[0];
85 $this->args[0] = substr( $parts[1], 0, 22 );
86 $this->hash = substr( $parts[1], 22 );
87 }
88}
and that you know you can do these things To protect your we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights These restrictions translate to certain responsibilities for you if you distribute copies of the or if you modify it For if you distribute copies of such a whether gratis or for a you must give the recipients all the rights that you have You must make sure that receive or can get the source code And you must show them these terms so they know their rights We protect your rights with two and(2) offer you this license which gives you legal permission to copy
A Bcrypt-hashed password.
parseHash( $hash)
Perform any parsing necessary on the hash to see if the hash is valid and/or to perform logic for see...
getDelimiter()
Returns the delimiter for the parameters inside the hash.
crypt( $password)
getDefaultParams()
Return an ordered array of default parameters for this password hash.
MediaWiki exception.
Helper class for password hash types that have a delimited set of parameters inside of the hash.
Show an error when any operation involving passwords fails to run.
string $hash
String representation of the hash without the type.
Definition Password.php:71