Fonction Crypto (XOR) [Résolu]

cs_ghuysmans99 3983 Messages postés jeudi 14 juillet 2005Date d'inscription 30 juin 2013 Dernière intervention - 26 août 2007 à 09:50 - Dernière réponse : BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention
- 26 août 2007 à 13:36
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>
Afficher la suite 

5 réponses

Répondre au sujet
BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention - 26 août 2007 à 13:36
+3
Utile
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++
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de BruNews
cs_asako 3 Messages postés jeudi 18 janvier 2007Date d'inscription 26 août 2007 Dernière intervention - 26 août 2007 à 10:47
0
Utile
Bonjour,

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

++
Commenter la réponse de cs_asako
cs_vicenzo 179 Messages postés mardi 16 août 2005Date d'inscription 25 août 2010 Dernière intervention - 26 août 2007 à 10:56
0
Utile
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...
Commenter la réponse de cs_vicenzo
cs_ghuysmans99 3983 Messages postés jeudi 14 juillet 2005Date d'inscription 30 juin 2013 Dernière intervention - 26 août 2007 à 12:52
0
Utile
[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>
Commenter la réponse de cs_ghuysmans99
cs_ghuysmans99 3983 Messages postés jeudi 14 juillet 2005Date d'inscription 30 juin 2013 Dernière intervention - 26 août 2007 à 12:54
0
Utile
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>
Commenter la réponse de cs_ghuysmans99

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.