Inscription / Connexion Nouveau Sujet
Niveau logiciels
Partager :

Notation hexadécimale sur Maple

Posté par
Happpy
09-02-14 à 16:55

Bonjour tout le monde, je travaille sur le codage d'un algorithme (chiffrement AES) sur Maple et j'ai un problème peut-être idiot.

Soit le code suivant :


stringToHex := proc (s)
     local liste, tailleListe, i;
     liste := convert(s, bytes);
     tailleListe := nops(liste);
     for i from 1 to tailleListe do
          liste[i] := convert(liste[i], hex, 2);
     end do;
     liste;
     end proc;



Le but de ce code est d'obtenir la représentation hexadécimale de chaque caractère de la chaîne de caractères passée en paramètres à partir de leur valeur décimale selon l'ASCII.
Le problème étant que je veux obtenir deux hexa pour chaque lettre de la chaîne (important pour la suite de l'algorithme) : par exemple obtenir 0F au lieu de F ou 01 au lieu de 1.
J'ai donc essayé de mettre 2 en paramètre supplémentaire lors de la conversion en hexadécimal, sans succès...
J'ai cherché autre pars mais sans succès puis j'ai pensé à venir ici, j'espère que je trouverais de l'aide...

J'ai même pensé à créer ma propre fonction de conversion, premièrement obtenir les représentations décimales de chaque caractères de la chaîne dans une liste, puis convertir chaque élément de cette liste en binaire, compléter ses bits par des 0 à gauche afin d'avoir un octet = 2 hexa, et enfin faire la conversion de chaque octet de la liste en hexa, mais c'est pénible, en effet regardez :

sbox := proc (h)
     if h = 0 then 63
     elif h = 1 then 7*C
     elif h = 2 then 77
     elif h = 3 then 7*B
     .
     .
     .
     elif h = FA then 2*D
     elif h = FB then 0*F
     elif h = FC then B0
     elif h = FD then 54
     elif h = FE then BB
     elif h = FF then 16
     end if;
     end proc;


Copié telle qu'elle depuis Maple, on voit que Maple n'a pas tenu compte du h = 01 et a mis 1 tout simplement (h est un nombre hexadécimal sur 2 hexa), de même après les then on voit 7*C au lieu de 7C, et pourtant c'est ce que j'ai tapé...
Si je veux faire la conversion des octet de la liste manuellement en hexadécimal, j'ai pensé à diviser cet octet en 2 liste de 4 bits et ensuite faire la correspondance 4 bit = 1 hexa, et ensuite "coller" les deux hexa obtenus mais je ne vois pas comment faire ceci...

Bref, j'ai vraiment cherché mais en vain, j'espère que vous pourrez m'aider car je ne peux vraiment pas aller plus loin


Merci d'avance.

Posté par
Happpy
re : Notation hexadécimale sur Maple 09-02-14 à 16:57

P.S : La fonction sbox n'a rien à voir avec ce dont je parlais pour la conversion, c'était juste pour montrer qu'il y a un problème au niveau de la notation même des nombres hexadécimaux...

Posté par
pgeod
re : Notation hexadécimale sur Maple 09-02-14 à 18:26

A première vue tu as l'air de travailler avec des variables numériques
de type hexa, plutôt qu'avec des chaines de caractères !

Donne un exemple de conversion de ce que tu souhaites obtenir..

Posté par
Happpy
re : Notation hexadécimale sur Maple 09-02-14 à 18:51

Re bonjour, alors en lançant ma première fonction stringToHex du premier poste on a par exemple :

> stringToHex("Bonjour tout le monde !!!");
[42, 6F, 6E, 6A, 6F, 75, 72, 20, 74, 6F, 75, 74, 20, 6C, 65, 20, 6D, 6F, 6E, 64, 65, 20, 21, 21, 21]


On voit bien que je travaille avec une valeur numérique et non une chaîne de caractères.
Là ici tout est ok, on a deux hexa car la valeur décimale ASCII des caractères de la chaîne nous le permet, étant supérieure à 16 en l'occurrence, c'est parfaitement ce que je veux obtenir.
Mais si je tombe sur un caractère dont la représentation hexadécimale est F, problème car on a un seul hexa, or moi j'en ai besoin absolument de deux pour poursuivre, il faut donc compléter avec un zéro, on doit donc avoir 0F.

D'où mon idée de coder moi-même ma conversion, mais c'est pénible.
J'ai pensé à diviser la représentation binaire du caractère qui est un octet en deux fois 4 bits, et ensuite faire la correspondance 4 bits = 1 hexa, et ensuite concaténer les deux hexa obtenus mais encore une fois je ne travaille pas avec une chaîne de caractère donc je ne peux pas concaténer ça comme ça je pense...
Et même, j'ai parlé précédemment du fait que Maple n'a pas reconnu que j'écrivais en hexadécimal dans ma fonction sbox... donc ça pose problème aussi ça...


:|


P.S : Je suis en classe prépa et le codage de l'algorithme est la finalisation de mon TIPE sur le chiffrement AES.

Posté par
pgeod
re : Notation hexadécimale sur Maple 09-02-14 à 19:25

petite question préliminaire : la liste (on va l'appeler l la liste) [42,
6F, ..., 21, 21] est une liste de variables numériques hexadécimales ?

1° question : En oubliant pour l'instant le fait que tu obtiens F au lieu de
OF, la variable l(i) est de quelle nature ? Qu'est-ce que retourne l'évaluation de l(1) par exemple (un nombre ? décimal ou hexa ? un caractère ?) Qu'est-ce que ça donne dans un test d'égalité ?

2° question : et est-ce que cette évaluation te permet de poursuivre le traitement de ton programme ?

Posté par
Happpy
re : Notation hexadécimale sur Maple 09-02-14 à 22:47

1) La liste l ne contient pas vraiment des variables, mais ce sont des valeurs hexadécimales.
convert/bytes va associer à chaque caractère de la chaîne sa valeur ascii numérique en décimale, et ensuite on convertit chaque valeur de l en hexadécimal.
Donc non ce ne sont pas des variables à proprement parler.

l[1] retourne en l'occurrence ici 42, l[2] renvoie 6F, donc ce sont des nombres hexadécimaux.

Pour le teste d'égalité j'ai ça :
> if stringToHex("Bonjour tout le monde !!!")[2] = 6*F then OK else NON end if;
NON

Donc sur Maple j'ai bien tapé 6F, j'ai testé, j'ai obtenu NON, et en copiant ici ça m'a mis 6*F....
Il y a donc un réel problème quelque part au niveau de la notation hexadécimale...


2) Je ne sais pas vraiment par contre...

Posté par
pgeod
re : Notation hexadécimale sur Maple 10-02-14 à 17:23

une petite vérification à faire tout de même :
les indices de liste commence à 0 ou à 1 sous Maple ?

Citation :
2) Je ne sais pas vraiment par contre...

si tu ne sais pas comment exploiter stringToHex("Bonjour tout le monde !!!")[i]
que cette fonction retourne F ou bien OF
à quoi cela sert-il de passer par cette routine ?

fais déjà un whattype de stringToHex("Bonjour tout le monde !!!")[i]
ce devrait être un Symbol que l'on peut convertir en string
avec  convert(aSymbol, string).

Posté par
Happpy
re : Notation hexadécimale sur Maple 10-02-14 à 19:38

C'est parfait !
Grâce à convert(symbol,strin) j'ai pu corriger mon problème en créant cette fonction qui va vérifier chaque hexa de la liste l


correctHex := proc(h)
     local s, taille, newHex;
     s := convert(h,string);
     taille := Length(s);
     newHex := h;
     if taille < 2 then newHex := convert(cat("0",s),symbol); fi;
     newHex;
     end proc;

Et stringToHex devient simplement :

stringToHex := proc (s)
     local liste, tailleListe, i;
     liste := convert(s, bytes);
     tailleListe := nops(liste);
     for i from 1 to tailleListe do
          liste[i] := convert(liste[i], hex);
          liste[i] := correctHex(liste[i);
     end do;
     liste;
     end proc;


Et pour tester, si je fais
correctHex(convert("4",symbol)) on a bien 04 qui est un symbole


Problème résolu !


Merci beaucoup pour l'aide !!!

Posté par
pgeod
re : Notation hexadécimale sur Maple 10-02-14 à 19:44

Posté par
Happpy
re : Notation hexadécimale sur Maple 12-02-14 à 23:44

Re bonjour, désolé de remonter le topic mais j'ai une autre question ^^


J'ai pas mal avancé, et j'ai besoin de convertir un polynôme en une liste.
On se place dans le cas où chaque monôme du polynôme a pour coefficient 1.

Si par exemple j'ai la liste [1,0,0,1,1,1] j'obtiens le polynôme 1+x+x^2+x^5
Ça c'est fait.

Maintenant ce que je cherche à faire c'est dans chemin inverse, avoir par exemple le polynôme

x^7 + x^3 + x^2 + x + 1 et obtenir la liste [1,0,0,0,1,1,1,1] par exemple...
Mais je ne sais pas comment isoler les monômes d'un polynôme...
Après pour obtenir le degré du monôme j'utiliserai la commande degree mais faut-il déjà que je l'isole.


Merci d'avance.

Posté par
Happpy
re : Notation hexadécimale sur Maple 12-02-14 à 23:49

Désolé du double poste, j'ai pensé à une méthode, peut-être pas optimale mais qui me permettra peut-être de faire ce que je veux.

Je détermine premièrement le degré du polynôme.
Ensuite je fais une boucle for pour i variant de 0 à degré
ensuite je demande le coefficient du terme de degré i, si ce coefficient est nul, c'est qu'il n'appartient pas au polynôme, sinon, je passe la case correspondante de la liste à 1.

Théoriquement ça peut fonctionner.

Posté par
Happpy
re : Notation hexadécimale sur Maple 14-02-14 à 11:29

Problème résolu grâce à CoefficientList

Posté par
pgeod
re : Notation hexadécimale sur Maple 14-02-14 à 21:03

Bravo ! Même pas le temps de répondre.

Posté par
Happpy
re : Notation hexadécimale sur Maple 01-03-14 à 01:27

Re bonjour !!!
Ça fait un bon moment, j'ai bien avancé dans mes recherches et mon projet.
Je suis donc sur la finalisation de l'implémentation de l'algorithme AES.

Pour mettre dans le contexte, les deux liens principalement utilisés :
http://www.cs.bc.edu/~straubin/cs381-05/blockciphers/rijndael_ingles2004.swf
http://csrc.nist.gov/publications/fips/fips197/fips-197.pdf
et on se place dans le cas où le message fait 128bits, de même pour la clé.

Pour les étapes subBytes, shiftRows, mixColumns et "la création de la RoundKey" + le XOR (= addRoundKey) j'ai tout codé et j'ai vérifié qu'on obtenait bien le résultat voulu (en retrouvant les exemples du lien PDF principalement et roundKey sur la page dynamique), c'est ok.
Cependant j'aimerai vérifier que ma fonction finale est correcte en donnant un exemple.

C1 : fonction de chiffrement, createMatrixFromString crée la matrice hexadécimale de la chaîne passée en paramètre. Les tours vont de 0 à 9.

C2 : exemples de chiffrement avec la représentation matricielle hexadécimale du résultat.

C3 : fonction de déchiffrement, là encore, les fonction invSubBytes, invShiftRows et invMixColumns ont été testées et donnent bien le résultat voulu.

Notation hexadécimale sur Maple

Notation hexadécimale sur Maple

Notation hexadécimale sur Maple

Posté par
Happpy
re : Notation hexadécimale sur Maple 01-03-14 à 01:31

c4 : exemple de chiffrement pour voir si on retrouve bien le message "CLASSE PREPA !!!", ce qui n'est pas le cas.

Alors je ne sais pas si ma fonction AESEncrypt est déjà ratée ou si c'est juste la fonction AESDecrypt... mais en tout cas toutes les autres fonctions avant font bien leur boulot. Donc le problème n'est pas par là, elles ont été testées, testées et retestées.

Je suis venu ici à cause de ce problème (on ne retrouve pas "CLASSE PREPA !!!" lors du déchiffrement) mais surtout pour confirmer que les exemples sont correct (pour l'Encrypt notamment car on ne donne pas d'exemple dans le document PDF).


P.S : Si vous voulez voir plus de code il n'y a pas de soucis, il est bien modulé et les fonctions ne sont pas longues.

Merci d'avance.

Notation hexadécimale sur Maple

Posté par
Happpy
re : Notation hexadécimale sur Maple 01-03-14 à 01:32

P.S2 (arf désolé du triple poste inutile je suis vraiment désolé),

CX désigne la capture d'écran X.
Les affichages sont dans l'ordre, C1 puis C2, puis C3 et enfin C4 dans le poste juste au dessus...



Merci d'avance.

Posté par
Happpy
re : Notation hexadécimale sur Maple 03-03-14 à 14:22

Up...

Posté par
Happpy
re : Notation hexadécimale sur Maple 04-03-14 à 20:00

Désolé des postes multiples, mais je cherche, je mets au courant pour pouvoir poursuivre sur d'autres problèmes... On ne peut pas me reprocher ça...


Alors j'ai vu qu'il y avait un exemple de chiffrement à la fin du PDF !!! (désolé mais je ne l'avais vraiment pas vu avant...)
Grâce à ça j'ai pu repérer le problème lors du chiffrement.
Ma fonction de chiffrement a donc été corrigée et je retombe bien sur le résultat de l'exemple du PDF.
(IMAGE 1)


Ma fonction de chiffrement étant donc correcte, voila un autre exemple !
Autre exemple :
(IMAGE 2)


Maintenant, reste le déchiffrement et là, problème...
Donc là encore une fois, mes fonctions auxiliaires (invXXXX....) sont corrects, elles ont été testées et retestées individuellement.

Voila ma fonction de déchiffrement :
(IMAGE 3)

Notation hexadécimale sur Maple

Notation hexadécimale sur Maple

Notation hexadécimale sur Maple

Posté par
Happpy
re : Notation hexadécimale sur Maple 04-03-14 à 20:01

Désolé, poste limité à 3 images....


Preuve que le déchiffrement n'est pas correct :
(IMAGE 4)


Mon code de déchiffrement ne doit pas être correct non plus... je continue à chercher...

Notation hexadécimale sur Maple

Posté par
Happpy
re : Notation hexadécimale sur Maple 04-03-14 à 20:07

Pour ceux qui arriveraient juste, voila le lien du PFD dont je parle :
http://csrc.nist.gov/publications/fips/fips197/fips-197.pdf

Posté par
Happpy
re : Notation hexadécimale sur Maple 05-03-14 à 00:26

Après de nombreuses heures de recherche et des modifications diverses dans mon code, j'ai corrigé le problème et TOUT est ok c'est impeccable
Je suis content d'avoir résolu le problème tout seul


Merci quand même à tous

Répondre à ce sujet

Seuls les membres peuvent poster sur le forum !

Vous devez être connecté pour poster :

Connexion / Inscription Poster un nouveau sujet
Une question ?
Besoin d'aide ?
(Gratuit)
Un modérateur est susceptible de supprimer toute contribution qui ne serait pas en relation avec le thème de discussion abordé, la ligne éditoriale du site, ou qui serait contraire à la loi.


Vous devez être membre accéder à ce service...

Pas encore inscrit ?

1 compte par personne, multi-compte interdit !

Ou identifiez-vous :


Rester sur la page

Désolé, votre version d'Internet Explorer est plus que périmée ! Merci de le mettre à jour ou de télécharger Firefox ou Google Chrome pour utiliser le site. Votre ordinateur vous remerciera !