- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 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
class Security{
private $workFactor, $salt;
public function __construct(){
$this->setWorkFactor();
$salt = $this->getSaltBytes();
$this->setSalt($salt);
}
public function hash($password, $workFactor = 6){
$options = [
'cost' => (int)$workFactor,
'salt' => $this->getSalt()
];
$hash = password_hash($password, PASSWORD_BCRYPT, $options);
return $hash;
}
public function checkHash($password, $passwordHash, $options = []){
if( isset($options['salt'])){
$this->setSalt($options['salt']);
}
$workFactor = isset($options['workFactor']) ?
$options['workFactor'] : $this->getWorkFactor();
return $passwordHash === $this->hash($password, $workFactor);
}
public function isLegacyHash($passwordHash){
return strlen($passwordHash) === 60;
}
public function getSalt(){
return $this->salt;
}
public function setSalt($salt){
$this->salt = $salt;
}
public function getSaltBytes($lenght = 24){
return $this->getRandomBytes($lenght);
}
public function getRandomBytes($lenght = 24){
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$charactersLength = strlen($characters);
$randomString = '';
for ($i = 0; $i < $lenght; $i++){
$randomString .= $characters[rand(0, $charactersLength - 1)];
}
return $randomString;
}
public function setWorkFactor($workFactor = 6){
$this->workFactor = (int)$workFactor;
}
public function getWorkFactor(){
return $this->workFactor;
}
}
laMer007 28.05.2015 18:58 # −3
Stertor 28.05.2015 19:00 # −1
Сперма очень плохо отмывается с рук, особенно, если они [руки] волосатые
3_14dar 28.05.2015 20:15 # 0
Пиздеж
kegdan 28.05.2015 20:26 # 0
3_14dar 28.05.2015 20:32 # 0
laMer007 28.05.2015 21:24 # 0
laMer007 28.05.2015 21:25 # 0
Stallman 28.05.2015 21:46 # 0
kegdan 29.05.2015 05:05 # +2
bormand 28.05.2015 21:34 # 0
Stertor 28.05.2015 21:49 # −1
bormand 28.05.2015 21:55 # 0
Stertor 28.05.2015 21:57 # −1
laMer007 28.05.2015 23:56 # 0
guest 29.05.2015 00:15 # 0
kegdan 29.05.2015 05:17 # 0
bormand 28.05.2015 21:36 # 0
Отличный пример, как можно одной функцией просрать всю безопасность. А ведь код так хорошо начинался...
P.S. Или автор это специально сделал, на случай внезапного увольнения?
bormand 28.05.2015 21:41 # 0
laMer007 29.05.2015 09:10 # 0
bormand 29.05.2015 09:22 # +1
Аска Лэнгли?
> они были одинаковыми
А они и будут. При задании пароля результаты getSalt() и hash() запишут в базу. А при проверке в checkHash() соль из базы попадает через $options (или через setSalt(), как вариант).
laMer007 29.05.2015 10:54 # 0
bormand 29.05.2015 11:16 # 0
И жить с ней трудно, Синдзи подтвердит.
kegdan 29.05.2015 11:09 # 0
bormand 29.05.2015 11:16 # 0
Перечисли.
Ну Мисато же няша, её то не хочется уебать? :)
kegdan 29.05.2015 11:17 # 0
Stallman 29.05.2015 11:21 # 0
bormand 29.05.2015 12:22 # 0
Stallman 29.05.2015 12:44 # 0