Create a gist now

Instantly share code, notes, and snippets.

What would you like to do?
<?php
/**
* Bcrypt hashing class
*
* @author Thiago Belem <contato@thiagobelem.net>
* @link https://gist.github.com/3438461
*/
class Bcrypt {
/**
* Default salt prefix
*
* @see http://www.php.net/security/crypt_blowfish.php
*
* @var string
*/
protected static $_saltPrefix = '2a';
/**
* Default hashing cost (4-31)
*
* @var integer
*/
protected static $_defaultCost = 8;
/**
* Salt limit length
*
* @var integer
*/
protected static $_saltLength = 22;
/**
* Hash a string
*
* @param string $string The string
* @param integer $cost The hashing cost
*
* @see http://www.php.net/manual/en/function.crypt.php
*
* @return string
*/
public static function hash($string, $cost = null) {
if (empty($cost)) {
$cost = self::$_defaultCost;
}
// Salt
$salt = self::generateRandomSalt();
// Hash string
$hashString = self::__generateHashString((int)$cost, $salt);
return crypt($string, $hashString);
}
/**
* Check a hashed string
*
* @param string $string The string
* @param string $hash The hash
*
* @return boolean
*/
public static function check($string, $hash) {
return (crypt($string, $hash) === $hash);
}
/**
* Generate a random base64 encoded salt
*
* @return string
*/
public static function generateRandomSalt() {
// Salt seed
$seed = uniqid(mt_rand(), true);
// Generate salt
$salt = base64_encode($seed);
$salt = str_replace('+', '.', $salt);
return substr($salt, 0, self::$_saltLength);
}
/**
* Build a hash string for crypt()
*
* @param integer $cost The hashing cost
* @param string $salt The salt
*
* @return string
*/
private static function __generateHashString($cost, $salt) {
return sprintf('$%s$%02d$%s$', self::$_saltPrefix, $cost, $salt);
}
}
@ghost

This comment has been minimized.

Show comment Hide comment
@ghost

ghost Aug 4, 2013

I'll sure use it. Thanks!

ghost commented Aug 4, 2013

I'll sure use it. Thanks!

@rafaelbeckel

This comment has been minimized.

Show comment Hide comment
@rafaelbeckel

rafaelbeckel Jan 15, 2016

Cara, publica isso como um pacote do composer... =)

Cara, publica isso como um pacote do composer... =)

@kheoth

This comment has been minimized.

Show comment Hide comment
@kheoth

kheoth Jun 23, 2016

cara valeu mesmo por disponibilizar seu código, vai me ajudar muito em um projeto!!!!

kheoth commented Jun 23, 2016

cara valeu mesmo por disponibilizar seu código, vai me ajudar muito em um projeto!!!!

@brunopereiradonascimento

This comment has been minimized.

Show comment Hide comment
@brunopereiradonascimento

brunopereiradonascimento Sep 20, 2016

Show brother! Valeu!

Show brother! Valeu!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment