Passed
Push — master ( 9db407...b7ae74 )
by Anthony
02:58
created

Encrypt::setDecryptMdp()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 10
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
c 2
b 0
f 0
dl 0
loc 10
rs 9.4285
cc 1
eloc 5
nc 1
nop 2
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) {
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

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.

Loading history...
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
	}