[Pascal][cryptage] grandes chaines de caractères

grandes chaines de caractères [Pascal][cryptage] - Delphi/Pascal - Programmation

Marsh Posté le 10-04-2004 à 19:35:09    

Bonjour à tous,
je suis en 1ere année d'info, je fais du pascal sous delphi 7.
je dois faire un programme de cryptage RSA. Pour cela, je dois générer des nombres premiers à 100chiffres et effectuer des opérations dessus.
Comme les types integer ne sont pas assez grands, que les types réels arrondissent trop pour faire des calculs précis, j'ai choisi d'utiliser des chaines de caractères.
j'ai donc écri des fonctions qui permettent d'additionner, soustraire, diviser, multiplier des chaines de caractères constituées de chiffres.
 
seulement lors de mes calculs, il m'arrive de dépasser les 255caractères autorisés par le type String.
je sais qu'il existe un type AnsiString d'environ 2^30 caractères (ça devrait suffire lol) mais je n'arrive pas à l'utiliser. en effet, si je fais
 

Code :
  1. program Toto;
  2. {$APPTYPE CONSOLE}
  3. uses
  4.   SysUtils;
  5. var
  6.   string1: AnsiString;
  7. begin 
  8.   string1:='321232145148915.....250782446'; // 257 chiffres


et bien cela plante. Comment puis-je faire ?
Merci beaucoup


Message édité par BiLLKiLL le 10-04-2004 à 19:35:36
Reply

Marsh Posté le 10-04-2004 à 19:35:09   

Reply

Marsh Posté le 10-04-2004 à 21:50:55    

Un tableau d'entiers ne serait pas plus efficace ?

Reply

Marsh Posté le 10-04-2004 à 22:13:57    

si tu trouves comment faire du  
20^p avec p :entier à 100 chiffre et récupérer TOUS les chiffres significatifs sans le moindre arrondi, d'accord, mais à ma connaissance, le plus grand entier pouvant etre stocké est de type int64, çàd seulement 20 chiffres.

Reply

Marsh Posté le 10-04-2004 à 22:16:41    

BiLLKiLL a écrit :

si tu trouves comment faire du  
20^p avec p :entier à 100 chiffre et récupérer TOUS les chiffres significatifs sans le moindre arrondi, d'accord, mais à ma connaissance, le plus grand entier pouvant etre stocké est de type int64, çàd seulement 20 chiffres.


 
D'où l'intérêt de regrouper plusieurs entiers dans un tableau pour en former un plus grand ;)

Reply

Marsh Posté le 10-04-2004 à 22:24:53    

oui mais je dois pouvoir faire des calculs dessus, (puissance, multiplication, ect...) et avec des tableaux d'entiers, je vois pas bien comment faire...


Message édité par BiLLKiLL le 10-04-2004 à 22:28:39
Reply

Marsh Posté le 10-04-2004 à 22:44:43    

BiLLKiLL a écrit :

oui mais je dois pouvoir faire des calculs dessus, (puissance, multiplication, ect...) et avec des tableaux d'entiers, je vois pas bien comment faire...


 
Tu effectue les calculs sur chaque entier du tableau, en oubliant pas de faire remonter les retenues. En plus, ce sont des entiers non signés donc tu n'aura pas de problèmes de ce côté là.
 
Tu peux faire de la strength reduction ("réduction de force" :??: je ne connais pas la bonne traduction française). Par exemple, pour faire une multiplication, tu fais un décalage vers la gauche (vers le poids fort) + une addition.
 
C'est une solution relativement efficace, mais peut-être un peu complexe à mettre en oeuvre.
 
J'espère que d'autres que moi vont te répondre et t'apporter une meilleure solution :jap:
 
 
EDIT : je ne connais pas du tout le Pascal, et je ne sais pas si c'est aussi simple à implémenter qu'en C.


Message édité par printf le 10-04-2004 à 22:46:31
Reply

Marsh Posté le 10-04-2004 à 22:47:32    

c'est ce que j'ai fai mais avec des chaines de caractère, (je prends les caractères un par un et les tansforme en entier, puis je fais l'opération comme sur papier, et je mets le résultat dans un tableau en décalant) parceque avec les entiers, je me suis dis que ce serai galère de passer d'une ligne à la suivante/précédente.
je sais que certaines bibliothèques gérant le RSA en pascal marchent avec des chaines de caractères. je voudrais juste savoir comment utiliser des grandes chaines de caractères, mes fonctions de calculs sont déjà en place et marchent très bien, c'est juste que je dépasse les 255 chiffres...


Message édité par BiLLKiLL le 10-04-2004 à 22:49:55
Reply

Marsh Posté le 11-04-2004 à 12:19:20    

BiLLKiLL a écrit :


seulement lors de mes calculs, il m'arrive de dépasser les 255caractères autorisés par le type String.


 
string n'est pas un type mais un mot clé (c'est pour ça qu'il apparaît en gras et qu'on l'écrit tout en minuscule) qui redirige vers ShortString ou AnsiString/LongString selon le cas.
 

BiLLKiLL a écrit :


je sais qu'il existe un type AnsiString d'environ 2^30 caractères (ça devrait suffire lol) mais je n'arrive pas à l'utiliser. en effet, si je fais
 
  string1:='321232145148915.....250782446'; // 257 chiffres
 
et bien cela plante. Comment puis-je faire ?
Merci beaucoup


 
string1 accepte sans problème les 2^31-1 caractères vu que par défaut string = AnsiString, mais la chaîne tapée entre ' ' dans le code est d'office une ShortString.
On ne peut pas le modifier, donc tu dois faire ta chaîne comme ceci :
 
  string1 := '321232145148915' + '...250782446';
 
(par paquets de 255 caractères max)


Message édité par antp le 11-04-2004 à 12:21:19

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 11-04-2004 à 16:29:30    

ok, merci beaucoup ;)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed