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

Langage Delphi Discussion :

Aide sur la traduction de c++ vers delphi


Sujet :

Langage Delphi

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 7
    Par défaut Aide sur la traduction de c++ vers delphi
    Salut à tous je pense que le titre vous a donné une idée de ce que je veux
    alors ... j'ai un code de l'algo xtea et xtea bloc decrypt mais écrit en c++ mais je le veux en delphi, j'ai pu traduire la moitier mais j'ai échoué dans la deuxième

    N.B : Je veux traduire ce code tel qu'il est en c n'ajoutez rien svp pck c tré imprtant

    voila le code
    Code c : 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
    51
    52
    53
    54
    55
    56
    57
    XTEA Block
    ---------------------------------------------------------------------------*/
    void XTEA_Decrypt(BYTE* Buf, BYTE* Key)
    {
    DWORD v0, v1, delta, sum, k1, k2;
    int i;
     
    v0 = *((DWORD*)(Buf+0));
    v1 = *((DWORD*)(Buf+4));
    delta = 0x9E3779B9;
    sum = 32 * delta;
    for (int i=0; i<32; i++)
     {
      k1 = *((DWORD*)(Key+((sum>>9)& 0x0C)));
      v1-= (((v0<<4)^(v0>>5)) + v0)^(sum + k1);
      sum-=delta;
      k2 = *((DWORD*)(Key+((sum & 0x03)<<2)));
      v0-= (((v1<<4)^(v1>>5)) + v1)^(sum + k2);
     }
    *((DWORD*)(Buf+0)) = v0;
    *((DWORD*)(Buf+4)) = v1;
    }
    /*---------------------------------------------------------------------------
    cbc buggy xtea function
    ---------------------------------------------------------------------------*/
    void XTEA_Bloc_Decrypt(BYTE* Buf, DWORD Size, BYTE* Key)
    {
    BYTE* pBlock;
    BYTE* pMask;
     
    //Last 8 bytes aligned bloc
    pBlock = Buf + ((Size - 8) & 0xFFFFFFF8);
    if (Size>8)
     {
      for (DWORD i = 0; i<Size/8; i++)
       {
        //Choose IV
        if (pBlock!=Buf)
         pMask = pBlock - 8;
        else
         pMask = Buf+Size-8; //Last complete
     
        //xor block (buggy cbc-> should be done after decrypting)
        for (int j = 0; j<8; j++)
         pBlock[j] ^= pMask[j];
     
        //decrypt block
        XTEA_Decrypt(pBlock, Key);
     
        //next block
        pBlock-=8;
        }
      //decrypt again last block
      XTEA_Decrypt(pMask, Key);
      }
    }
    //---------------------------------------------------------------------------

    et voila ce que j'ai écrit pour la première fonction...

    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
    TYPE
    XTEABUF = array[0..1] of longword;
    PXTEABUF = XTEABUF^
    XTEAkey = array[0..3] of longword;
    PXTEAkey = XTEAkey^
    .
    .
    .
    procedure XTEA_Decrypt(Buf:PXTEABUF;Key:PXTEAkey)
    VAR
    v0, v1, delta, sum, k1, k2 :longword;
    i:integer;
    begin
    v0 := Buf[0];
    v1 := Buf[1];
    delta := $9E3779B9;
    sum := 32 * delta;
    for i := 0 to 31 do
    begin
      k1 := Key[((sum>>9) and $C))];
      dec(v1,(((v0 shl 4) xor (v0 shr 5)) + v0)xor(sum + k1));
      dec(sum,delta);
      k2 := Key[((sum and 3) shl 2))];
      dec(v0,(((v1 shl 4) xor (v1 shr 5)) + v1) xor (sum + k2));
    end;
    buf[0] = v0;
    buf[1] = v1;
    end;
    maintenant il me manque la 2eme partie de "cbc buggy xtea function" svp chers membres aidez moi à traduire cette fonction ? j'attends vos propositions et merci à tous en avance

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 041
    Par défaut
    peux-tu fournir déjà une base du 2eme code passé en delphi, que l'on travaille QUE sur la partie qui te pose problème ...

    Tu demandes de traduire un code, inutile de préciser que l'on ne doit rien ajouter, cela coule de source ...

    Ensuite, lorsque c'est important, on évite le SMS
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 7
    Par défaut
    merci beaucoup
    s'il vous plait j'ai quelques questions aidez :
    que veut dire ce type "BYTE*" en delphi est-ce le "PBYTE"?
    Et comment faire ça en delphi?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    //Last 8 bytes aligned bloc
    pBlock = Buf + ((Size - 8) & 0xFFFFFFF8);
    mErci d'avance

  4. #4
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 041
    Par défaut
    PByte (ou ^Byte) c'est BYTE*
    mais tu peux aussi utiliser Array of Byte passé en var ... en delphi, c'est plus simple à comprendre ...

    je pense que ça doit donner ça ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pBlock = Buf + ((Size - 8) and $FFFFFFF8);
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  5. #5
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 7
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    PByte (ou ^Byte) c'est BYTE*
    mais tu peux aussi utiliser Array of Byte passé en var ... en delphi, c'est plus simple à comprendre ...

    je pense que ça doit donner ça ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pBlock = Buf + ((Size - 8) and $FFFFFFF8);
    merci mais je ne pense pas parce que pblock est un pointer et buf est un array je ne suis pas sûre mais ça doit être comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    pBlock = addr(Buf[(size-8) and $FFFFFFF8]);

  6. #6
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 041
    Par défaut
    Si tu reste en PByte, tu peux additionner des pointers, en Delphi 7, il faut par contre caster (sur les récents, je crois que l'on peut s'en passer)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pBlock = PByte(Cardinal(Buf) + ((Size - 8) and $FFFFFFF8));
    si tu pars sur un Buf comme Array of Char, ce que tu as écrit est bon, tout dépend les types ...
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

Discussions similaires

  1. Petits problèmes de traduction de C vers Delphi
    Par Gilbert Geyer dans le forum Langage
    Réponses: 14
    Dernier message: 28/06/2011, 16h19
  2. Aide pour traduction C++ vers Delphi
    Par BobaL dans le forum Langage
    Réponses: 8
    Dernier message: 25/01/2011, 18h47
  3. Aide pour traduction DLL de C++ vers Delphi
    Par Pierre95 dans le forum Langage
    Réponses: 10
    Dernier message: 11/11/2008, 21h02
  4. Aide sur les templates de codes de Delphi 2006
    Par vanquish dans le forum Delphi
    Réponses: 1
    Dernier message: 23/06/2006, 16h22
  5. probleme traduction C vers Delphi
    Par zinaif dans le forum Langage
    Réponses: 3
    Dernier message: 27/06/2003, 08h51

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