hash.php 1.17 KB
Newer Older
1
<?php namespace Laravel;
2

3
class Hash {
4 5 6 7 8 9

	/**
	 * Hash a password using the Bcrypt hashing scheme.
	 *
	 * <code>
	 *		// Create a Bcrypt hash of a value
10
	 *		$hash = Hash::make('secret');
11 12
	 *
	 *		// Use a specified number of iterations when creating the hash
13
	 *		$hash = Hash::make('secret', 12);
14 15 16 17 18 19
	 * </code>
	 *
	 * @param  string  $value
	 * @param  int     $rounds
	 * @return string
	 */
20
	public static function make($value, $rounds = 8)
21
	{
22 23
		$work = str_pad($rounds, 2, '0', STR_PAD_LEFT);

24 25
		// Bcrypt expects the salt to be 22 base64 encoded characters including
		// dots and slashes. We will get rid of the plus signs included in the
Taylor Otwell committed
26
		// base64 data and replace them with dots.
27 28 29 30 31 32 33 34 35 36 37 38
		if (function_exists('openssl_random_pseudo_bytes'))
		{
			$salt = openssl_random_pseudo_bytes(16);
		}
		else
		{
			$salt = Str::random(40);
		}

		$salt = substr(strtr(base64_encode($salt), '+', '.'), 0 , 22);

		return crypt($value, '$2a$'.$work.'$'.$salt);
39 40
	}

41 42 43 44 45 46 47 48 49 50 51 52
	/**
	 * Determine if an unhashed value matches a Bcrypt hash.
	 *
	 * @param  string  $value
	 * @param  string  $hash
	 * @return bool
	 */
	public static function check($value, $hash)
	{
		return crypt($value, $hash) === $hash;
	}

53
}