Fonction plus, opérateurs bit à bit et rapidité [Résolu/Fermé]

Signaler
Messages postés
4
Date d'inscription
samedi 1 février 2014
Statut
Membre
Dernière intervention
6 mars 2015
-
Messages postés
609
Date d'inscription
vendredi 31 juillet 2009
Statut
Membre
Dernière intervention
24 juin 2016
-
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 ?

3 réponses

Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 756
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,
Messages postés
4
Date d'inscription
samedi 1 février 2014
Statut
Membre
Dernière intervention
6 mars 2015

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.
Messages postés
609
Date d'inscription
vendredi 31 juillet 2009
Statut
Membre
Dernière intervention
24 juin 2016
43
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