|
1
|
|
|
<?php |
|
2
|
|
|
namespace core\auth; |
|
3
|
|
|
|
|
4
|
|
|
use core\App; |
|
5
|
|
|
use core\functions\ChaineCaractere; |
|
6
|
|
|
|
|
7
|
|
|
class Encrypt { |
|
8
|
|
|
private static $params; |
|
9
|
|
|
|
|
10
|
|
|
|
|
11
|
|
|
//-------------------------- CONSTRUCTEUR ----------------------------------------------------------------------------// |
|
12
|
|
|
//-------------------------- FIN CONSTRUCTEUR ----------------------------------------------------------------------------// |
|
13
|
|
|
|
|
14
|
|
|
|
|
15
|
|
|
//-------------------------- GETTER ----------------------------------------------------------------------------// |
|
16
|
|
|
/** |
|
17
|
|
|
* @param null $id_identite |
|
18
|
|
|
* @return string |
|
19
|
|
|
*/ |
|
20
|
|
|
public static function getParams($id_identite = null) { |
|
21
|
|
|
if ($id_identite != null) { |
|
22
|
|
|
$dbc = App::getDb(); |
|
23
|
|
|
$params = ""; |
|
24
|
|
|
|
|
25
|
|
|
$query = $dbc->query("SELECT mdp_params FROM identite WHERE ID_identite=".$id_identite); |
|
26
|
|
|
if ((is_array($query)) && (count($query) > 0)){ |
|
27
|
|
|
foreach ($query as $obj) { |
|
28
|
|
|
$params = $obj->mdp_params; |
|
29
|
|
|
} |
|
30
|
|
|
} |
|
31
|
|
|
} |
|
32
|
|
|
else { |
|
33
|
|
|
$params = self::$params; |
|
34
|
|
|
} |
|
35
|
|
|
|
|
36
|
|
|
return $params; |
|
37
|
|
|
} |
|
38
|
|
|
//-------------------------- FIN GETTER ----------------------------------------------------------------------------// |
|
39
|
|
|
|
|
40
|
|
|
|
|
41
|
|
|
//-------------------------- SETTER ----------------------------------------------------------------------------// |
|
42
|
|
|
/** |
|
43
|
|
|
* fonction qui permet d'encrypter un mot de passe, une fois encrype, on save les params pour le retrouver en bdd |
|
44
|
|
|
* @param string|null $mdp |
|
45
|
|
|
* @param $id_identite |
|
46
|
|
|
* @return string |
|
47
|
|
|
*/ |
|
48
|
|
|
public static function setEncryptMdp($mdp, $id_identite = null) { |
|
49
|
|
|
$encrypt_str = ChaineCaractere::random(154); |
|
50
|
|
|
|
|
51
|
|
|
//on cache le mdp |
|
52
|
|
|
$mdp = md5($mdp); |
|
53
|
|
|
|
|
54
|
|
|
//récupération de la logneur du mot de passe |
|
55
|
|
|
$longeur_mdp = strlen($mdp); |
|
56
|
|
|
|
|
57
|
|
|
//on va couper le mot de passe en 2 suivant un nombre aleatoire |
|
58
|
|
|
$nb_aleatoire_mdp = rand(3, $longeur_mdp - 2); |
|
59
|
|
|
$bout1_mdp = mb_substr($mdp, 0, $longeur_mdp / 2, "UTF-8"); |
|
60
|
|
|
$bout2_mdp = mb_substr($mdp, $longeur_mdp / 2, $longeur_mdp, "UTF-8"); |
|
61
|
|
|
|
|
62
|
|
|
//on stock la taille des bouts pour pouvoir les décrypter |
|
63
|
|
|
$taille_bout1 = strlen($bout1_mdp); |
|
64
|
|
|
$taille_bout2 = strlen($bout2_mdp); |
|
65
|
|
|
|
|
66
|
|
|
//on insere le premier bout aleatoirement dans le hashmdp |
|
67
|
|
|
//on calcul sa longeur total (celle duhash + la logneur du mdp que l'on va rajouter dedans) |
|
68
|
|
|
$longueur_hash = strlen($encrypt_str); |
|
69
|
|
|
$debut_bout1 = rand(0, $longueur_hash / 2); |
|
70
|
|
|
|
|
71
|
|
|
//on rajouter le premier bout dans le mot de passe + recalcule de la longeur du hash avec le mdp add |
|
72
|
|
|
$encrypt_str = mb_substr($encrypt_str, 0, $debut_bout1).$bout1_mdp.mb_substr($encrypt_str, $debut_bout1, $longueur_hash); |
|
73
|
|
|
|
|
74
|
|
|
//on insere le second bout aleatoirement dans le hashmdp |
|
75
|
|
|
//on calcul sa longeur total (celle duhash + la logneur premier bout du mdp que l'on va rajouter dedans) |
|
76
|
|
|
$longueur_hash = strlen($encrypt_str); |
|
77
|
|
|
$debut_bout2 = rand($longueur_hash / 2, $longueur_hash); |
|
78
|
|
|
|
|
79
|
|
|
//on rajoute le deuxieme |
|
80
|
|
|
$mdp_encrypt = mb_substr($encrypt_str, 0, $debut_bout2).$bout2_mdp.mb_substr($encrypt_str, $debut_bout2, $longueur_hash); |
|
81
|
|
|
|
|
82
|
|
|
if ($id_identite != null) { |
|
83
|
|
|
self::setSaveParams("$taille_bout1, $debut_bout2, $nb_aleatoire_mdp, $taille_bout2, $debut_bout1, ".ChaineCaractere::random(20), $id_identite); |
|
84
|
|
|
} |
|
85
|
|
|
else { |
|
86
|
|
|
self::$params = "$taille_bout1, $debut_bout2, $nb_aleatoire_mdp, $taille_bout2, $debut_bout1, ".ChaineCaractere::random(20); |
|
87
|
|
|
} |
|
88
|
|
|
|
|
89
|
|
|
return $mdp_encrypt; |
|
90
|
|
|
} |
|
91
|
|
|
|
|
92
|
|
|
/** |
|
93
|
|
|
* fonction qui permet de décrypter un mdp |
|
94
|
|
|
* @param $mdp |
|
95
|
|
|
* @param $id_identite |
|
96
|
|
|
* @return string |
|
97
|
|
|
*/ |
|
98
|
|
|
public static function setDecryptMdp($mdp, $id_identite) { |
|
99
|
|
|
//récupérations des parametres pour la décryption |
|
100
|
|
|
self::$params = explode(", ", self::getParams($id_identite)); |
|
101
|
|
|
|
|
102
|
|
|
//récupération du premier bout en fonction du tableau |
|
103
|
|
|
$bout1_mdp = mb_substr($mdp, self::$params[4], self::$params[0]); |
|
104
|
|
|
$bout2_mdp = mb_substr($mdp, self::$params[1], self::$params[3]); |
|
105
|
|
|
|
|
106
|
|
|
return $bout1_mdp.$bout2_mdp; |
|
107
|
|
|
} |
|
108
|
|
|
|
|
109
|
|
|
/** |
|
110
|
|
|
* sauvegarde les parametres pour retrouver le mot de passe dans la bdd |
|
111
|
|
|
* @param string $params |
|
112
|
|
|
* @param $id_identite |
|
113
|
|
|
*/ |
|
114
|
|
|
public static function setSaveParams($params, $id_identite) { |
|
|
|
|
|
|
115
|
|
|
$dbc = App::getDb(); |
|
116
|
|
|
|
|
117
|
|
|
$value = array( |
|
118
|
|
|
"params" => $params, |
|
119
|
|
|
"id_identite" => $id_identite |
|
120
|
|
|
); |
|
121
|
|
|
|
|
122
|
|
|
$dbc->prepare("UPDATE identite SET mdp_params=:params WHERE ID_identite=:id_identite", $value); |
|
123
|
|
|
} |
|
124
|
|
|
//-------------------------- FIN SETTER ----------------------------------------------------------------------------// |
|
125
|
|
|
} |
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.
You can also find more detailed suggestions in the “Code” section of your repository.