-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathPassword.php
73 lines (60 loc) · 2.08 KB
/
Password.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
<?php
class Hash_Password
{
/**
* validate password hash
*
* @param string $hash
* @param string $password
* @return boolean
*/
public static function validate($hash, $password)
{
if (!preg_match('/\{(.*)\}.*/', $hash, $matches)) {
throw new Exception('unsupported hash: ' . $hash);
}
$algo = strtoupper($matches[1]);
switch ($algo) {
case (strpos($algo, 'CRYPT') !== false):
$hashClass = new Hash_Password_Crypt();
break;
case (strpos($algo, 'SHA') !== false):
$hashClass = new Hash_Password_SHA();
break;
case (strpos($algo, 'MD5') !== false):
$hashClass = new Hash_Password_MD5();
break;
default:
throw new InvalidArgumentException('Unsupported algo provided: ' . $algo);
break;
}
return $hashClass->validate($hash, $password);
}
/**
* generate password hash
*
* @param string $hashType
* @param string $password
* @param boolean $addPrefix add {HASHTYPE} prefix
* @return string
*/
public static function generate($hashType, $password, $addPrefix = true)
{
$hashType = strtoupper($hashType);
switch ($hashType) {
case (strpos($hashType, 'CRYPT') !== false):
$hashClass = new Hash_Password_Crypt();
break;
case (strpos($hashType, 'SHA') !== false):
$hashClass = new Hash_Password_SHA();
break;
case (strpos($hashType, 'MD5') !== false):
$hashClass = new Hash_Password_MD5();
break;
default:
throw new InvalidArgumentException('Unsupported algo provided: ' . $algo);
break;
}
return $hashClass->generate($hashType, $password, $addPrefix);
}
}