IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Turbo Pascal Discussion :

Cryptage simple, code erroné ?


Sujet :

Turbo Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 3
    Par défaut Cryptage simple, code erroné ?
    Bonjour à tous. Voila, je me lance en ce moment dans le Pascal, et j'ai un code de cryptage simple à faire. Il me semblait avoir fait quelque chose de correct, mais le fichier cible contient exactement la même chose que le fichier source au final.

    (a savoir : les chemins de fichiers ont été evidemment verifiés )

    Voici le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    {* Cryptage *}
     
    PROGRAM cryptage;
    USES crt;
     
    VAR
    source, cible: file of char;
    lettre, cle: char;
    nbcle, nblettre, nba, nbcar: INTEGER;
     
    BEGIN
    WRITELN ('Veuillez saisir une cl‚ de crytage');
    Readln (cle);
    Assign (source, 'Z:\turbo\source.txt');
    Assign (cible, 'Z:\turbo\cible.txt');
     
    RESET (source);
    REWRITE (cible);
     
    READ (source, lettre);
    WHILE (NOT EOF(source)) DO
    BEGIN
    IF (lettre>'@') AND (lettre<'[')THEN
    BEGIN
    nbcle := ORD(cle);
    nblettre := ORD(lettre);
    nba := ORD('A');
    nblettre := nblettre+(nbcle-nba);
    lettre := CHR(nblettre);
    END;
    IF (lettre>'Z')THEN
    BEGIN
    nbcar := ORD('[');
    nblettre := nba+(nblettre-nbcar);
    lettre := CHR(nblettre);
    END;
    WRITE(cible, lettre);
    READ(source, lettre);
    END;
     
    CLOSE(source);
    CLOSE(cible);
     
    END.
    D'avance merci si vous trouvez l'erreur ou si vous avez une méthode autre à me proposer

    (en espérant avoir posté au bon endroit)

  2. #2
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Par défaut
    Je n'ai pas cherché à trop comprendre ton code, mais il y a un truc qui saute à l'œil.
    Le fait de lire dans le fichier source avant de vérifier si on a atteint la fin du fichier ou pas peut provoquer une erreur.
    Le mieux est de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    
    WHILE (NOT EOF(source)) DO
    BEGIN
    
    READ (source, lettre);
    
    IF (lettre>'@') AND (lettre<'[')THEN
    BEGIN
    nbcle := ORD(cle);
    nblettre := ORD(lettre);
    nba := ORD('A');
    nblettre := nblettre+(nbcle-nba);
    lettre := CHR(nblettre);
    END;
    IF (lettre>'Z')THEN
    BEGIN
    nbcar := ORD('[');
    nblettre := nba+(nblettre-nbcar);
    lettre := CHR(nblettre);
    END;
    WRITE(cible, lettre);
    
    END;
    aussi, il se peut que les les conditions des deux if placés dans la boucle ne soient jamais verifiés toutes les deux. Auquel cas, le caractere lu dans la source n'a pas été modifié. Ce qui peut conduire à ce que la source soit identique au resultat.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 3
    Par défaut
    Merci pour l'info. Cependant, apres avoir effectué la modification que tu m'as proposé, le fichier cible reste a présent vide. Il ne comporte meme plus les données du début.

    J'avoue, je débute et j'ai un peu de mal, mais mon prof est totalement incapable de me situer mes erreurs (le comble) . Mais étant donné que ceci est ma matiere principale, j'ai plutot interet a trouver une solution ^^'

    (le code modifié donne ceci si j'ai compris ton conseil)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    {* Cryptage *}
     
    PROGRAM cryptage;
    USES crt;
     
    VAR
      source, cible: file of char;
      lettre, cle: char;
      nbcle, nblettre, nba, nbcar: INTEGER;
     
    BEGIN
    WRITELN ('Veuillez saisir une cl‚ de crytage');
    Readln (cle);
    Assign (source, 'Z:\Pascal\source.txt');
    Assign (cible, 'Z:\Pascal\cible.txt');
     
    RESET (source);
    REWRITE (cible);
     
    WHILE (NOT EOF(source)) DO
     
    BEGIN
    READ (source, lettre);
     
    IF (lettre>'@') AND (lettre<'[')THEN
    BEGIN
    nbcle := ORD(cle);
    nblettre := ORD(lettre);
    nba := ORD('A');
    nblettre := nblettre+(nbcle-nba);
    lettre := CHR(nblettre);
    END;
    IF (lettre>'Z')THEN
    BEGIN
    nbcar := ORD('[');
    nblettre := nba+(nblettre-nbcar);
    lettre := CHR(nblettre);
    END;
    WRITE(cible, lettre);
     
    END;
     
    CLOSE(source);
    CLOSE(cible);
     
    END.

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 3
    Par défaut
    Je me permet un double post. J'ai fini par faire marcher le programme, meme si il refuse pour le moment le A comme clé. Avec T, cela fonctionne et me crypte le message simple. LE decryptage fonctionne presque, l'ennui etant la premiere lettre.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    {* Cryptage *}
     
    PROGRAM cryptage;
    USES crt;
     
    VAR
      source, cible: file of char;
      lettre, cle: char;
      nbcle, nblettre, nba, nbcar: INTEGER;
     
    BEGIN
    WRITELN ('Veuillez saisir une cl‚ de crytage');
    Readln (cle);
    Assign (source, 'Z:\Pascal\source.txt');
    Assign (cible, 'Z:\Pascal\cible.txt');
     
    RESET (source);
    REWRITE (cible);
     
    BEGIN
     
        READ (source, lettre);
    	WHILE (NOT EOF(source)) DO
     
     
       BEGIN   
     
     
          IF (ord(lettre)>64) AND (ord(lettre)<91)THEN
             BEGIN
              nbcle := ORD(cle);
              nblettre := ORD(lettre);
              nba := ORD('A');
              nblettre := nblettre+(nbcle-nba);
              lettre := CHR(nblettre);
             END;
          IF (lettre>'Z')THEN
             BEGIN
              nbcar := ORD('[');
              nblettre := nba+(nblettre-nbcar);
              lettre := CHR(nblettre);
             END;
          WRITE(cible, lettre);
          READ(source, lettre);
       END;  
     
    CLOSE(source);
    CLOSE(cible);
    END;
    END.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    {* Decryptage *}
     
    PROGRAM decryptage;
    USES crt;
     
    VAR
      source, cible: file of char;
      lettre, cle: char;
      nbcle, nblettre, nba, nbz, nbcar: INTEGER;
     
    BEGIN
    WRITELN ('Veuillez saisir une cl‚ de d‚crytage');
    Readln (cle);
    Assign (source, 'Z:\Pascal\cible.txt');
    Assign (cible, 'Z:\Pascal\cible2.txt');
     
    RESET (source);
    REWRITE (cible);
     
    BEGIN
     
    READ (source, lettre);
    WHILE (NOT EOF(source)) DO
    BEGIN
          IF (ord(lettre)>64) AND (ord(lettre)<91)THEN
          BEGIN
             nbcle := ORD(cle);
             nblettre := ORD(lettre);
             nba := ORD('A');
             nblettre := (nblettre-(nbcle-nba))+1;
             lettre := CHR(nblettre);
             IF (lettre<'A') THEN
             BEGIN
    	    nbz := ORD('Z');
                nbcar := ORD('A');
                nblettre := nbz-(nbcar-nblettre);
                lettre := CHR(nblettre);
             END;
          END;
          WRITE(cible, lettre);
          READ(source, lettre);
    END;
    END;
    CLOSE(source);
    CLOSE(cible);
     
    END.

    Voici le cryptage decryptage. Vous constaterez un '+1' qui s'est glissé dans le decryptage, reparation manuelle au marteau d'un bug constaté, le message decrypté était décalé d'une lettre. L'ennui c'est que la premiere lettre, elle, ne suit pas les autres (bizarre)

    Bref, j'ai deja pas mal avancé, mais si vous comprenez mes soucis...

  5. #5
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 971
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 971
    Par défaut
    Boe,

    Pour tes petits problèmes, éternel retour à la base : papier + crayon, écrire clairement ce qu'il faut faire, en déduire l'algorithme, exécuter manuellement cet algorithme sur un petit exemple, jusqu'à ce que le résultat soit celui attendu.

    PUIS coder dans le langage choisi.

Discussions similaires

  1. code erroné ou non??
    Par issam16 dans le forum Access
    Réponses: 1
    Dernier message: 21/06/2006, 12h50
  2. Problème cryptage simple de fichier
    Par darthnexus dans le forum C++
    Réponses: 4
    Dernier message: 03/06/2006, 18h16
  3. code erroné
    Par moonia dans le forum Langage
    Réponses: 2
    Dernier message: 28/04/2006, 13h59
  4. decortiquer un simple code
    Par splinternabs dans le forum C++
    Réponses: 3
    Dernier message: 23/04/2006, 06h52
  5. Cryptage Simple de mot de passe
    Par xavmax dans le forum C++Builder
    Réponses: 12
    Dernier message: 29/11/2005, 23h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo