Bonjour à tous,
je pense que plusieurs personnes se sont déjà arraché les cheveux en PHP et sa gestion de l'unicode! Et oui PHP risque de mourir si ils n'arrivent pas à implémenter réellement UNICODE. Mais bon bref.

Je vous explique mon problème que je ne sais comment résoudre... Je veux faire un simple cryptage de type VERNAM (MDP + CLE). Maintenant mon but est de faire une fonction qui transforme les caractère en Binaires de cette manière à l'aide d'un XOR je n'ai besoin que d'une fonction pour crypter et décrypter.

J'ai effectivement bien regarder ce qui concerne les mb_strings, du coup j'arrive au moins à avoir des longueurs de strings corrects. Mais maintenant je ne sais toujours pas comment faire lorsque j'ai un caractère de plusieurs bytes.

Pourriez-vous me donner un coup de main...!

Sinon je vais


ps: voici le code, comme c'était juste un test ce n'est pas encore très propre, merci de m'en excuser.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
 
<?php
    header('Content-Type: text/html; charset=UTF-8'); 
    define('KEY_MD5', 'Je ne_5ui5 pa5_un héro!');
    define('BASE', 16);  
 
    //testLogin('ygyongy', 'β', $myBdd, $myBddLink, $myUser);
 
 
 
    function testLogin("ygyongy", "β", $oDb, $link, $oUser)
    {
 
########################### Debut de la codification en BIN ###########################        
        $pwdLength = mb_strlen($password, 'utf-8');
        echo $password."<br>";
        echo $pwdLength;
 
        for($i=0; $i<$pwdLength; $i++)
        {
            $pwd_chars_array[] = mb_substr($password, $i, 1, 'utf-8');
        }
 
        $nb_element = count($pwd_chars_array);
 
        for($i = 0; $i < $nb_element; $i++)
        {
            //retourne le code ASCII de chaque caractère du mdp
            $ascii_pwd_array[$i] = ord($pwd_chars[$i]);         
            $bin_pwd_string .= sprintf("%0".BASE."d", decbin($ascii_pwd_array[$i]));
        }
 
        $key_chars = (str_split(KEY_MD5));
        $nb_element = count($key_chars);
 
        for($i = 0; $i < $nb_element; $i++)
        {
            //retourne le code ASCII de chaque caractère de la clef
            $ascii_key_array[$i] = ord($key_chars[$i]);  
            $bin_key_string .= sprintf("%0".BASE."d", decbin($ascii_key_array[$i]));
        }   
########################### Fin de la codification en BIN ##############################
 
 
 
 
 
 
########################### Debut de l'adapatation des longueurs de chaines ###########################         
        $lpwd = strlen($bin_pwd_string);
        $lkey = strlen($bin_key_string);
 
        //Permet de tronquer ou ajouter des caractères à la clef pour qu'elle joue avec le PWD
        if($lkey > $lpwd)
        {
            $diff_char = $lpwd-$lkey;
            $bin_key_string = substr($bin_key_string, 0, $diff_char); //je soustrait la différence
        }elseif($lpwd > $lkey){
            $bin_key_string = str_pad($bin_key_string, $lpwd, $bin_key_string, STR_PAD_RIGHT);
        }
########################### Fin de l'adapatation des longueurs de chaines #############################    
 
 
 
 
 
 
########################### Différents tests et appels de fonction ###########################            
        $hash_test = cryptage($bin_pwd_string, $bin_key_string);
        echo "<hr>";
        echo $hash_test;
 
	$hash_test = mb_convert_encoding($hash_test, 'utf-8');
 
 
        $nb_element = strlen($hash_test)/BASE;
        $start = 0;
        $test = null;
 
        for($i = 0; $i < $nb_element; $i++)
        {            
            if($start < strlen($hash_test))
            {
                $test[] = bin2Ascii($hash_test, $start);
            }
            $start += BASE;
        }
 
########################### Différents tests et appels de fonction ###########################   
 
 
 
 
 
 
 
 
############################ Reconstruction du mot de passe###################################### 
        $nb_element = strlen($tmp)/BASE;
        $start = 0;
 
        for($i = 0; $i < $nb_element; $i++)
        {            
            if($start < strlen($tmp))
            {
                $test[] = bin2Ascii($tmp, $start);
            }
 
            echo $start += BASE;
        }
############################ fin de la reconstruction du mot de passe#############################        
    } // fin de function testLogin
 
 
 
    function cryptage($parameter1, $parameter2)
    { 
        $length = strlen($parameter1);
        echo $parameter1."<br>".$parameter2;
        for($i=0; $i < $length; $i++)
        {
            $hash .= (bool)$parameter1[$i] ^ (bool)$parameter2[$i];
        }
        return $hash;
    }
 
 
    function bin2Ascii($chaine, $start)
    {
        $tmp = substr($chaine, $start, BASE);
        $tmp = bindec($tmp);
        $tmp = chr($tmp);
        return $tmp;
    }
Merci