Bonjour aux lecteurs,
J'ai des résultats incompréhensibles pour moi sur la manipulation de chaînes de caractères particulières. Bien que sans impact sur le problème rencontré le but est ici de faire du chiffrement.
- Création d'une chaîne de caractères partir d'un tirage aléatoire sur les valeurs de 0 à 255 avec utilisation de chr()
$Chaine = 'wµh®/¤d5¥b1dNvaB,f*G½j uV w;I[6®±gJ]|';
Cette chaîne devient un référent pour mon chiffrement.
Je vais donc appliquer un algo quelconque (opération mathématique, salage et déplacement dans la chaine, qui n'est pas l'objet de la question) pour obtenir une valeur entre 0 et 255 pour chaque caractère d'une cible.
Ainsi
$Cible = "Ceci n'est qu'1 chaîne quelconque à chiffrer en 2015 !"
$Resultat = Chiffrer($Cible);
donne "±²45`¯dL3SO*hq¹N2L;³r7£brbzPbZj^µ8e<¿E@5¦²aS´rqx¢JG¢Yt½±»O(+¼jºy¸§:+5Xzh¬k¯\\$Q";
Pour aboutir à ceci l'algo produit un entier, caractère par caractère et cet entier résultant est traité par Chr() pour retourner une chaîne chiffrée de la cible :
algo('C') = 177 ---> Chr(177) = ±
algo('e') = 178 ---> Chr(178) = ²
algo('c') = 52 ---> Chr(52) = 4
algo('i') = 53 ---> Chr(53) = 5
algo(' ') = 96---> Chr(96) =`
algo('n') = 175 ---> Chr(175) = ¯
algo("'") = 100 ---> Chr(100) = d
algo('e') = 76 ---> Chr(76) = L
etc ...
Cette chaîne en résultat est destinée à être stockée dans une table (interclassée UTF-8).
Problème : avant même le stockage j'ai des incohérences de plusieurs types :
$Resultat = "±²45`¯dL3SO*hq¹N2L;³r7£brbzPbZj^µ8e<¿E@5¦²aS´rqx¢JG¢Yt½±»O(+¼jºy¸§:+5Xzh¬k¯\\$Q";
$Borne = strlen($Resultat) - 1;
echo $Borne.'<br>';
for ($Index=0;$Index<=$Borne;$Index++) {echo substr($Resultat, $Index, 1).' '.Ord(substr($Resultat, $Index, 1)).'<br>';}
$Resultat est donc une suite ascci obtenue précédemment
$Borne devrait être de 79 et pourtant j'ai un echo de 99
J'attends une suite débutant par ± 177 - ² 178 - 4 52 - 5 53 - ` 96 -¯ 175 - d 100 -L 76 ...
alors que le retour obtenu est � 194 - � 177 - � 194 - � 178 - 4 52 - 5 53 - ` 96 - � 194 - � 175 - d 100 - L 76
Je bloque sur les caractères parasites (position 0, 2 et 7 par exemple) qui gonflent la longueur obtenue par StrLen() et sur le fait accessoirement que ma page (charset UTF-8) substitut le caractère � mais pas tout le temps.
Merci d'avance de votre aide (le chiffrement n'est pas le débat, mais si certains veulent échanger à ce sujet, pourquoi pas).