Fonction plus, opérateurs bit à bit et rapidité

Résolu/Fermé
Gugurumbe Messages postés 4 Date d'inscription samedi 1 février 2014 Statut Membre Dernière intervention 6 mars 2015 - 1 févr. 2014 à 12:55
sambia39 Messages postés 610 Date d'inscription vendredi 31 juillet 2009 Statut Membre Dernière intervention 9 février 2023 - 5 févr. 2014 à 19:19
Bonjour,

Pour des raisons de cryptographie, j'ai besoin de créer des fonctions pour gérer des grands entiers. J'ai 2 opportunités :
-> travailler en base 256. C'est difficile de gérer des retenues, c'est difficile de coder des multiplications et des divisions euclidiennes. On utilise les fonctions (+), (-), (*).
-> travailler en base 2, et traiter chaque bit séparément (par exemple, avec un masque qui se déplace). La multiplication devient triviale, l'addition et la soustraction presque autant, et on peut faire une division euclidienne convenable. Le problème, c'est que chaque opération doit traiter 8 bits : par exemple, (01001010 & 00100000) va regarder chacun des 8 bits du premier entier, alors que seul le 6ème m'importe.

Ma question est la suivante : est-ce que l'addition standard (+) sur des unsigned char est codée avec les opérateurs bit à bit ou est-ce qu'elle se fait en un seul passage ?
A voir également:

3 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 841
4 févr. 2014 à 22:45
Bonjour,

Pour ta question, cela dépend de ton processeur. Est-ce vraiment gênant de descendre à ce niveau ?

Sinon pour info, il existe des bibliothèques faisant le sale travail à notre place.

Cdlt,
0
Gugurumbe Messages postés 4 Date d'inscription samedi 1 février 2014 Statut Membre Dernière intervention 6 mars 2015
5 févr. 2014 à 16:15
Merci pour votre réponse. La dernière fois que j'ai joué avec rsa, j'ai mis une demi-seconde pour décoder un caractère, avec des clés (nombres premiers) composées de 40 bits. Il est vrai que je faisais des divisions euclidiennes dichotomiques mais être 8 fois plus rapide peut s'avérer intéressant même en faisant des divisions euclidiennes plus "pro".
Évidemment, si ça dépend du processeur je ne vais pas chercher à distinguer les cas.
Est-ce qu'éventuellement, un tableau de bool en c++ serait plus rapide ?
Sinon, j'essaierai GMP.
0
sambia39 Messages postés 610 Date d'inscription vendredi 31 juillet 2009 Statut Membre Dernière intervention 9 février 2023 49
5 févr. 2014 à 19:19
Bonjour à tous
C'est vague vos réponses par rapport à la puissance du processeur. je dirais plutôt, par exemple pour le chiffrement RSA, que ces nombres sont trop grands pour tenir dans les registres disponibles sur la plupart des ordinateurs car ceux-là sont limités au maximum à 64 bits.
bref j'essayerais de ne pas trop rentrer dans les détails théoriques pour définir comment est fait la RSA.
Si le 6ème bit t'importe, il t'est possible tout de même de faire des opérations bits à bits, et d'ailleurs les types booléens sont très utiles sauf le cas de certaines applications qui vont te forcer à utiliser des bits individuels d'une variable comme indicateurs.
Un peu de rappel avec le cas de tes 8 bits. qu'est-ce qu'on sait des états des changements de bits ?, je sais qu'un bit est dit chargé, armé ou activé s'il est égale 1 et désactivé, décharger ou désarmer quand il est égal à 0 donc il est possible de charger et décharger les bits, mais cela va forcément modifier la valeur de l'octet. Mais par chance le C++ permet de manipuler individuellement les bits de ta variable, alors attention à ne pas les confondre sachant que leurs applications donnent un résultat différent même-s'ils ressemblent vachement aux opérateurs logiques.
& , |, ^,~


à bientôt
0