Fonction Crypto (XOR) [Résolu]

Signaler
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
-
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
-
Bonjour à tous.
J'ai fait une fonction de Crypto en XOR et évidemment, ça ne fonctionne pas
Pourriez-vous me dire si c'est l'appel qui pose problème ou la fonction ??




#include <stdio.h>
#include <stdlib.h>
#include "Crypto.h"

int main(int argc, char *argv[])
{
    char machaine[17]="Bonjour le monde";
    char macle[18]="ma clef secrete!!";
    char res[17];
    Crypto(&machaine,&macle,&res);
    printf("Str: %s\n",machaine);
    printf("Key: %s\n",macle);
    printf("Res: %s\n",res);
    system("PAUSE");
    return 0;
}


void Crypto(char* Str[], char* Key[], char* Dest[])
{
      char pKey=0, lKey=0;
      char pStr=0, lStr=0;
      lKey = strlen(*Key);
      lStr = strlen(*Str);
      while (pStr<=lStr)
      {
            *Dest[pStr] = *Str[pStr] ^ *Key[pKey];
            pStr++;
            pKey++;
            if (pKey>lKey)
               pKey=0;
      }
}



_______________________________________________________________________


VB.NET
is good ...
VB6
is better <f></f>

5 réponses

Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
25
Je vais répéter ce qui convient en pareil cas.
Sauvegarde si tu veux ton VB où tu voudras mais surtout efface le de ton disque dur, ça t'évitera de le regarder pour coder en C.
On code en C en pensant adresse et pointeur, tout ce qui était impossible en interprété, pour cela qu'il faut se débarrasser le crane des scories et faux concepts de l'interprété.

ciao...
BruNews, MVP VC++
Messages postés
3
Date d'inscription
jeudi 18 janvier 2007
Statut
Membre
Dernière intervention
26 août 2007

Bonjour,

essaye :
crypto(machaine,macle,res);
 
et en déclaration de crypto :
void crypto(char *chaine, char *key, char *dest);

++
Messages postés
178
Date d'inscription
mardi 16 août 2005
Statut
Membre
Dernière intervention
25 août 2010
1
Bon, avant de continuer, un conseil reprend un bon bouquin sur le C.

Tu passes de VB au C ?

Ta fonction crypto possède au moins 2 bugs par ligne de code et ne peut absolument pas fonctionner...
De plus, ces bugs montrent que tu n'a pas encore compris et assimilé des principes de base de C (tableaux, pointeurs, ...)

Si je reprends ton algo et que le rend compilable cela donne :



void Crypto(char* Str, char* Key, char* Dest)
{
    char *pStr=Str, *pKey=Key, *pDest=Dest;

    while (*pStr)
    {
        *pDest++ = (*pKey++) ? (*pStr++ ^ *pKey++) : 0;
    }
}

Ce code fonctionne et compile mais inutilisable car aucun contrôle n'est effectué.
Faut aussi corriger le main qui fouarre..

Mais, honnêtement, prend un bouquin sur le C et apprend en premier... Passer de VB au C n'est si évident...
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
13
[auteurdetail.aspx?ID=564300
]

Quand je mets
char pStr=0 , pStr c'est le numéro du car. dans la chaîne...

_______________________________________________________________________


VB.NET
is good ...
VB6
is better <f></f>
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
13
Ca vient de ce code (VB)
Public Function Crypto(Text As String, Key As String) As String
Dim i As Integer
Dim tmp As String
Dim pK As Integer
Dim lT As Integer, lK As Integer
Dim aT As Integer, aK As Integer
lT = Len(Text)
lK = Len(Key)
For i = 1 To lT
 pK = pK + 1
 If pK > lK Then pK = 1
 aT = Asc(Mid(Text, i, 1))
 aK = Asc(Mid(Key, pK, 1))
 tmp = tmp & Chr(aT Xor aK)
Next i
Crypto = tmp
End Function
_______________________________________________________________________
VB.NETis good ...VB6is better <f></f>