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

Delphi Discussion :

Impossible d'utiliser l'operateur '+'


Sujet :

Delphi

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 43
    Par défaut Impossible d'utiliser l'operateur '+'
    Bonjour a tous,
    Voici mon bug, le genre de bug tellement simple, mais insolluble, vous savez, les bugs qui tiennent en 1 ligne et qui vous font peter un cable?

    Enfin bref,
    Tout le monde connait l'opérateur '+' (pas celui pour additionner des chiffre, celui pour mettre 2 chaine en une genre string3 := string1+string2, l'operateur de concatenation)

    Donc, ce merveilleux petit '+' qui a toujour tres bien marché a décidé de me faire faux bond...
    En effet, si j'essaie de faire
    chaine_fraichement_decrypé+'mon texte trop cool';
    et bah... Delphi renvoie la chaine_fraichement_décrypté sans le texte qui devrait s'y ajouter...

    Voici mon code:

    Fonction de decryptage:
    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
    function rijndael_decrypt(Data:string;Key:string;IV:string):string;
    var
     
      DataWZ, KeyWZ, IVWZ : string;  //WS = With zero (passé dans la fonction padwithzero)
    begin
      // Pad Key and IV with zeros as appropriate
      KeyWZ := PadWithZeros(key,KeySize);
      IVWZ := PadWithZeros(IV,BlockSize);
      // Decode the Base64 encoded string
      Data := Base64DecodeStr(DATA);
     
      if Length(KEY) <= 16 then
        form1.rijndael.Init(KeyWZ[1],128,@IVWZ[1])
      else if Length(KEY) <= 24 then
        form1.rijndael.Init(KeyWZ[1],192,@IVWZ[1])
      else
        form1.rijndael.Init(KeyWZ[1],256,@IVWZ[1]);
      // Decrypt the data
      form1.rijndael.DecryptCBC(Data[1],Data[1],Length(Data));
      // Free the cipher and clear sensitive information
      //Cipher.Free;
      FillChar(KeyWZ[1],Length(KeyWZ),0);
      // Display the result
      Result := Data;
    end;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     blop := Rijndael_decrypt(Server[1],'clédecrypt','abcdefghijklmnopqrstuvwxyz');
      showmessage(blop);
     showmessage(blop+'texte enplus ');
    Et la, le premier showmessage m'affiche le texte décrypté correctement
    et le 2e affiche... la même chose

    Vous comprenez maintenant, tout le principe du bug tellement bête qu'il est insolluble?

    J'espère que quelqun a deja rencontré ce probleme et pourra m'aider.

    Merci a tous.


    [edit]:ca ne pourrait pas venir , vous savez comme en C++ ou le dernier caractère de la chaine est un caractère NULL qui annonce la fin de la chaine, et peut être que ma fonction finit la chaine par un NULL et delphi s'arrete donc la... Enfin bon, je sais meme pas si en delphi ca marche ausis comme ca....

    [Edit2] : Ca venait bien de la, ma chaine contenait 4 caractère bizzard a la fin, en les supprimmant, je peut a nouveau concaténé...
    Ce post servira au moin au suivant qui aurra ce probleme...

  2. #2
    Membre Expert
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 288
    Par défaut
    Bonjour,

    Et par exemple si tu inverses ton :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    showmessage(blop+'texte enplus ');
    en :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    showmessage('texte enplus ' + blop);
    Ça donne quoi ?

    Edit : (vu ton [Résolu] oupsss, tu es un rapide toi

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 43
    Par défaut
    Parfois le texte qui est avant passe, mais si j'isole le caractère 0 de la chaine et que je veut mettre quelque chose avant, ca ne marche pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    showmessage('texte'+CHainefraichementdecrypté[0]);
    Le prog affichera pas 'texte';
    C'est tres embettant, parceque le nombre de ces caractère varie tout le temps!
    donc impossible de les retirer, d'autant plus que je ne peut pas les compter, puisque je ne sais pas avec quoi les comparer dans un if

    Edit : (vu ton [Résolu] oupsss, tu es un rapide toi
    J'ai mit "presque resolu" parceque il reste encore quelque interrogation...
    [edit:] mdr, on ne peut pas l'enlever en faite :s

    Solution:
    [Re-Edit:] Voici un bout de code permettant d'enlever les caractère NULL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
       NULLcounter:=0;
       for i:=1to length(data)do
        begin
        if ord(data[i]) = 0 then
        begin
     
        inc(NULLcounter);
         end;
        end;
        //en faite, le simple fait de redéfinir la longeur vire les caractere NULL
        setlength(data,length(data)-NULLcounter);
      // Display the result
      Result := Data;
    Maintenant, le prochain qui voudra faire mu-muse avec la concaténation de chaine décrypté du Rijndael serra comment faire... Si un jour quelqun cherche a faire ca mdr


    En espérant que tu le replaces bientôt ; ce qui sera bon signe.
    Voila qui est fait

  4. #4
    Membre Expert
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 288
    Par défaut
    Bonjour,

    spyk écrivait :
    J'ai mit "presque resolu" parceque il reste encore quelque interrogation...
    [edit:] mdr, on ne peut pas l'enlever en faite :s
    Je l'ai enlevé pour toi

    En espérant que tu le replaces bientôt ; ce qui sera bon signe.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Utilisation d'operateur booleen dans une requete
    Par olivier] dans le forum Langage SQL
    Réponses: 3
    Dernier message: 02/01/2006, 16h16
  2. DAO impossible d'utiliser une fonction dans un requete
    Par exter666 dans le forum VBA Access
    Réponses: 10
    Dernier message: 24/09/2005, 17h15
  3. Impossible d'utiliser DISTINCT avec des types image et ntext
    Par azlinch dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 17/08/2005, 17h43
  4. impossible d'utiliser un HWND parent dans un thread
    Par sylvain114d dans le forum Windows
    Réponses: 12
    Dernier message: 23/09/2004, 12h21
  5. impossible d'utiliser ma fonction dans un insert
    Par caramel dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 10/04/2003, 15h04

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