Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

vitesse de XOR

4 réponses
Avatar
kabina
Bonjour,
J'ai implémenté un programme de chiffrement XOR simple.
- lecture du fichier message
-lecture du fichier clé
-chiffrement XOR (^)
-écriture dans le fichier chiffrement
j'ai testé mon algorithme sur une clé de 8 caractère (donc 64 bits) avec un texte de 500ko
est j'ai obtenu un temps d'exécution un peu bizzard 1500468 milis!!!!!!! presque 30min pour un algorithme qu'on dit rapide. est ce normal?? je précis que le programme chiffre et déchiffre correctement.

merci à vous

4 réponses

Avatar
Thomas Pornin
According to kabina :
presque 30min pour un algorithme qu'on dit rapide. est ce normal??



Un processeur Intel genre Pentium ou suivant de base peut faire un XOR
bit-à-bit sur un mot de 32 bits en un demi-cycle d'horloge (i.e. il peut
en faire deux par cycles). Les variantes récentes (les Intel Core-truc
et les AMD équivalents) pourraient en faire six par cycle. Mettons
quatre par cycle. Pour 500 Ko, ça fait 125000 mots de 32 bits, donc
environ 31000 cycles d'horloge. Si ça prend 1500 secondes, alors ça veut
dire que votre PC est cadencé à 20 Hz. Si c'est vraiment le cas, alors
chapeau, parce que c'est le genre de cadence qu'on avait avant 1950 ;
c'est plus d'un _milliard_ de fois plus lent que ce qu'un banal
PC-de-la-FNAC fait par défaut, et, plus significatif, c'est un million
de fois plus lent que la cadence minimale à laquelle le processeur est
censé pouvoir tourner en mode d'économie d'énergie maximale.

Donc il y a un bug quelque part.

De toutes façons, le XOR lui-même est censé être plus rapide que le
simple fait d'amener les données au processeur, donc même si le fichier
est entièrement en RAM (cache disque), la vitesse du XOR sera celle de
la lecture du fichier. Cette remarque est valide pour beaucoup
d'algorithmes de chiffrement. Mon PC peut faire de l'AES à environ
128 Mo/s sur un seul de ses quatre coeurs, alors que le disque plafonne
à 105 Mo/s. Ne parlons même pas du réseau, c'est du 100baseT, donc
à peine mieux que 10 Mo/s.

Mais 500 Ko en 30 minutes pour lire un fichier, c'est plus que
misérable, c'est inquiétant. C'est comme si Kennedy avait demandé à la
NASA une fusée lunaire et que la NASA avait livré un skateboard. Donc
XOR ou pas, c'est fort louche. M'est avis que votre code est moult
buggué.


je précis que le programme chiffre et déchiffre correctement.



(Précisons tout de même que le chiffrement par XOR avec une clé de
taille fixe, c'est connu pour être bien faible ; Edgar A. Poe, auteur
bien connu, les cassait à la main il y a plus d'un siècle.)


--Thomas Pornin
Avatar
kabina
kabina a écrit le 01/02/2009 à 21h24 :
Bonjour,
J'ai implémenté un programme de chiffrement XOR simple.
- lecture du fichier message
-lecture du fichier clé
-chiffrement XOR (^)
-écriture dans le fichier chiffrement
j'ai testé mon algorithme sur une clé de 8 caractère (donc
64 bits) avec un texte de 500ko
est j'ai obtenu un temps d'exécution un peu bizzard 1500468 milis!!!!!!!
presque 30min pour un algorithme qu'on dit rapide. est ce normal?? je
précis que le programme chiffre et déchiffre correctement.

merci à vous


salut,

j'ai juste enlevé la fonction d'écriture dans un fichier et MIRACLE j'ai obtenu 24ms !!!!! Est ce qu'une simple fonction d'écriture ( byte par byte) pour ralentir à ce point???
Avatar
kabina
kabina a écrit le 01/02/2009 à 21h24 :
Bonjour,
J'ai implémenté un programme de chiffrement XOR simple.
- lecture du fichier message
-lecture du fichier clé
-chiffrement XOR (^)
-écriture dans le fichier chiffrement
j'ai testé mon algorithme sur une clé de 8 caractère (donc
64 bits) avec un texte de 500ko
est j'ai obtenu un temps d'exécution un peu bizzard 1500468 milis!!!!!!!
presque 30min pour un algorithme qu'on dit rapide. est ce normal?? je
précis que le programme chiffre et déchiffre correctement.

merci à vous


salut
c'était une erreur de programmation, j'avais mis ma fonction d'écriture à l'intérieur d'un while

bonne journée
Avatar
YBM
kabina a écrit :
kabina a écrit le 01/02/2009 à 21h24 :
Bonjour,
J'ai implémenté un programme de chiffrement XOR simple.
- lecture du fichier message
-lecture du fichier clé
-chiffrement XOR (^)
-écriture dans le fichier chiffrement
j'ai testé mon algorithme sur une clé de 8 caractère (donc
64 bits) avec un texte de 500ko
est j'ai obtenu un temps d'exécution un peu bizzard 1500468 milis!!!!!!!
presque 30min pour un algorithme qu'on dit rapide. est ce normal?? je
précis que le programme chiffre et déchiffre correctement.

merci à vous


salut,

j'ai juste enlevé la fonction d'écriture dans un fichier et MIRACLE j'ai obtenu
24ms !!!!! Est ce qu'une simple fonction d'écriture ( byte par byte) pour
ralentir à ce point???



Oui, ça fait quand même un appel système (entrée dans le noyau de l'OS)
par octet avec tout ce que ça implique comme changement de contexte du
processeur, de traitement côté pilote du système de fichiers, du disque,
etc.