1: <?php
2:
3: /**
4: * Pry Framework
5: *
6: * LICENSE
7: *
8: * This source file is subject to the new BSD license that is bundled
9: * with this package in the file LICENSE.txt.
10: *
11: * @version $Revision: 276 $
12: */
13:
14: /**
15: * Outils utiles pour la gestion d'authentification
16: * @category Pry
17: * @package Auth
18: * @version 1.0.0
19: * @author Olivier ROGER <oroger.fr>
20: *
21: *
22: */
23: class Auth_Util
24: {
25:
26: /**
27: * Calcul la complexité d'un mot de passe
28: * Basé sur système d'ajout et suppression de point :
29: *
30: * minuscule = +(longeur-nbMinuscule)*nbMinuscule
31: * majuscule = +((longeur-nbMajus)*nbMajus)+3
32: * chiffre = +nbChiffre*4
33: * Autre = +nbAutre*8
34: *
35: * Retrait de point :
36: *
37: * - nbMinusculeConsecutive*2
38: * - nbMajConsecutive*2
39: * - nbChiffreConsec*2
40: * - nbAutreCharConsec
41: * - nbCharIdentique*3
42: *
43: * On peut juger les mdp comme suit 0-33 : mauvais; 33-66 : moyen; 66-100 : bon; 100+ : Excellent
44: *
45: * @param string $pass Mot de passe
46: * @return int
47: */
48: public static function passwordComplexity($pass)
49: {
50:
51: $longeur = mb_strlen($pass);
52: $numMin = 0;
53: $numMaj = 0;
54: $numChiffre = 0;
55: $numOther = 0;
56: $consecMinLetter = 0;
57: $consecMajLetter = 0;
58: $consecNum = 0;
59: $consecChar = 0;
60: $sameChar = 0;
61:
62: if ($longeur > 2)
63: {
64: for ($i = 0; $i < $longeur; $i++) {
65: if ($pass[$i] >= 'a' && $pass[$i] <= 'z')
66: {
67: $numMin++;
68: if ($i > 0 && ($pass[$i - 1] >= 'a' && $pass[$i - 1] <= 'z'))
69: $consecMinLetter++;
70: }
71: elseif ($pass[$i] >= 'A' && $pass[$i] <= 'Z')
72: {
73: $numMaj++;
74: if ($i > 0 && ($pass[$i - 1] >= 'A' && $pass[$i - 1] <= 'Z'))
75: $consecMajLetter++;
76: }
77: elseif ($pass[$i] >= 0 && $pass[$i] <= 9)
78: {
79: $numChiffre++;
80: if ($i > 0 && ($pass[$i - 1] >= 0 && $pass[$i - 1] <= 9))
81: $consecNum++;
82: }
83: else
84: {
85: $numOther++;
86: if ($i > 0 && !preg_match('/^([a-zA-Z0-9]+)$/', $pass[$i - 1]))
87: $consecChar++;
88: }
89:
90: if ($i > 0 && $pass[$i] == $pass[$i - 1])
91: $sameChar++;
92: }
93: $positiveScore = ($longeur * 2) + (($longeur - $numMin) * $numMin) + ((($longeur - $numMaj) * $numMaj) + 3) +
94: ($numChiffre * 4) + ($numOther * 8);
95: $score = $positiveScore - (($consecMinLetter * 2) + ($consecMajLetter * 2) + ($consecNum * 2) + $consecChar +
96: ($sameChar * 3));
97: return $score;
98: }
99: else
100: {
101: return 0;
102: }
103: }
104: }
105:
106: ?>