Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1925 connectés 

  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°697258
BiLLKiLL
Posté le 10-04-2004 à 19:35:09  profilanswer
 

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
mood
Publicité
Posté le 10-04-2004 à 19:35:09  profilanswer
 

n°697297
printf
Baston !
Posté le 10-04-2004 à 21:50:55  profilanswer
 

Un tableau d'entiers ne serait pas plus efficace ?

n°697304
BiLLKiLL
Posté le 10-04-2004 à 22:13:57  profilanswer
 

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.

n°697305
printf
Baston !
Posté le 10-04-2004 à 22:16:41  profilanswer
 

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 ;)

n°697309
BiLLKiLL
Posté le 10-04-2004 à 22:24:53  profilanswer
 

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
n°697314
printf
Baston !
Posté le 10-04-2004 à 22:44:43  profilanswer
 

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
n°697315
BiLLKiLL
Posté le 10-04-2004 à 22:47:32  profilanswer
 

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
n°697434
antp
Super Administrateur
Champion des excuses bidons
Posté le 11-04-2004 à 12:19:20  profilanswer
 

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
n°697501
BiLLKiLL
Posté le 11-04-2004 à 16:29:30  profilanswer
 

ok, merci beaucoup ;)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

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

 

Sujets relatifs
champ input text bloquer à n caractères?[Pascal] J'ai besoin qu'on me sauve la vie avant 7H
C++/pascalxslt et caractères spaciaux (& < ...)
recherche d'exercice en pascalremplacement de chaine de caractères replace ne marche pas(vb6)
[C(++)/Pascal] Coder une console: pointer une chaine sur procedure ?Des caractères chinois dans un programme occidental *SOUS WIN9X*
Manipulation de chaînesconcaténation chaine de caractères
Plus de sujets relatifs à : [Pascal][cryptage] grandes chaines de caractères


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR