Bonjour à tous, j'ai récemment travaillé sur le mode PDU.. Pour ceux qui ne savent pas ce que c'est, c'est le mode de cryptage d'informations pour envoyer un SMS.. Le but est d'envoyer un sms à partir de son ordinateur
Je vais essayer d'être assez clair dans mes explications
Chaque lettre avant d'être envoyé est :
- remplacée par sa valeur ASCII
- Ensuite traduite en Binaire mais sur 7 bits
- Ensuite traduire le binaire 7 bits sur une base 7 de 8 bits (et c'est la que c'est drôle ^^ )
- Pour finalement le traduire en Hexadécimal et envoyé l'infos.
Les sources :
http://www.dreamfabric.com/sms/ (pour l'envoi complet d'un sms)
http://www.dreamfabric.com/sms/hello.html (pour la base 7 sur 8 bits)
En principe mon code est prévu pour que peu importe la taille du sms il passe.. Je n'ai pas encore su faire TOUT les tests.. Mais il semble plus que correct. Et par solidarité je vais le poster non pas pour ceux qui seront fainéant de le faire un jour, mais pour ceux qui après de longues recherches auront trouvés que très peu d'infos utiles..
(Veuillez excuser si par endroit il n'est pas le plus optimisé des codes mais s'y retrouver n'était pas une mince affaire ^^)
la partie conversion de l'ascii au binaire ne sera pas présentée car elle est en soi assez simple ^^
La procédure lecture7bits
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 sChai1, sChai2, sChai3, sChai4 sont des chaîne ANSI i, nDim1, k, j, m est un entier = 0 nTest est un entier nCompt,nCompt2 est un entier nDim1 = (Taille(LIB_Bin)/7) tab1 est un tableau de nDim1 chaînes ANSI tab2 est un tableau de nDim1 chaînes ANSI LIB_Hexa = "" POUR i = 0 _A_ nDim1 // On va lire les 7 bits sChai1 = Lecture7Bit(i) // On tronque les M bits à droites sChai2 = TruncD(sChai1, m) // On tronque les M bits à gauche sChai3 = TruncG(sChai1, m) nTest = modulo(i,8) SI nTest = 0 ALORS m = 0 FIN m++ SI i <> 0 ALORS j++ tab2[j] = sChai2 FIN k++ SI k < nDim1+1 ALORS tab1[k] = sChai3 FIN FIN POUR i = 1 _A_ nDim1 SI i+1 <= nDim1 ALORS SI tab1[i+1] <> EOT ALORS sChai4 += tab2[i] + tab1[i] SINON sChai4 += tab2[i+1] + tab2[i] tab1[i+1] = "" tab2[i+1] = "" FIN SINON sChai4 += tab2[i] + tab1[i] FIN FIN //Affiche résultat LIB_B7 = sChai4 nCompt = Taille(sChai4) nCompt = nCompt/ 8 nCompt2= modulo(Taille(sChai4),8) proc_Hexa(nCompt,nCompt2)
La procédure truncD
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 sLChaine est une chaîne = LIB_Bin sResul est une chaîne ANSI sResul = Milieu(sLChaine, (Ind*7 + 1), 7) RENVOYER sResul
La procédure truncG
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 sMResult est une chaîne ANSI sMResult = Droite(mChaine, Ind) RENVOYER sMResult
Et enfin la dernière proc_Hexa
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 sDResult est une chaîne ANSI sDResult = Gauche(dChaine, (7 - Ind)) RENVOYER sDResult
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 nInd est un entier = 0 nTemp est un entier nTemp2 est un entier POUR i = 1 _A_ nCompt nTemp = Milieu(LIB_B7,(nInd*8 +1),8) nTemp2 = Val(nTemp,2) LIB_Hexa+= Droite(EntierVersHexa(nTemp2),2) nInd ++ FIN nTemp = Droite(LIB_B7,ncompt2) nTemp2 = Val(nTemp,2) LIB_Hexa += Droite(EntierVersHexa(nTemp2),2)
Pour ceux qui ont des questions je suis dispo pour vous répondre, pour ceux qui ont des suggestions je suis tout ouïe..
Je le répète il est vérifié à 98% .. L'envoi complet de sms n'est pas encore finalisé et la simbox pas encore reçue ^^
J'espère que ce tuto vous sera très utile.
Bonne continuation à tous, et long vie à ce forum !
Partager