C/C++ Cryptage du pass 1.29

Inscrit
2 Juin 2013
Messages
4
Reactions
0
#1
Bonjour,

Voulant m'exercer à la programmation réseau en C (que je n'ai pas touché depuis un moment), je me suis lancé le petit défi de faire un "client", voir un bot.
Mais pour l'instant je bloque sur la partie chiffrement du mot de passe, mon programme me retourne une résultat différent de ce que je peux sniffer via le client original.

Voici le code en question :

C:
int main()
{
    char* session_key = "anotmlckuacjchbtpgrtdkzyamvqyifg";//HC...
    char HASH[] = { 'a', 'b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','0','1','2','3','4','5','6','7','8','9','-','_' };

    char* pass = "blabla";
    printf("Char : %s\n", pass);
    char* digest = malloc(strlen(pass) * 2 + 1 );
    int un = 0;
    int deux = 0;
    for (int i = 0; i < strlen(pass); i++)
    {
        un = (int)floor(pass[i] / 16);
        deux = (int)pass[i] % 16;
        digest[i * 2] = HASH[(un + (int)session_key[i] % strlen(HASH)) % strlen(HASH)];
        digest[i * 2 + 1] = HASH[(deux + (int)session_key[i] % strlen(HASH)) % strlen(HASH)];

    }
    digest[strlen(pass) * 2] = '\0';

    printf("Digest : %s\n",digest);

    *digest = 0;
    free(digest);
    return 0;
}
Merci d'avance,
Cordialement
 
Dernière édition:
Inscrit
31 Mars 2016
Messages
33
Reactions
0
#2
1. Ta variable 'digest' doit être initialisée avec "#1" et tu rajoutes les caractères derrière.
2.
Code:
  deux = (int)pass[i] % 16;
ça serait pas plutôt
Code:
  deux = (int)session_key[i] % 16;
 
Inscrit
2 Juin 2013
Messages
4
Reactions
0
#3
J'ai bien rajouter le #1 mais le problème que j'ai eu est soucis de libération de mémoire qui retournais donc des résultats changeant à +/- chaque lancement.

Voici ma solution (qui fonctionne) :

Code:
int main()
{
    char* session_key = "wnaxfdmzukcmhsuicbmumgrvshdhglae";//HC...
    char HASH[] = { 'a', 'b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','0','1','2','3','4','5','6','7','8','9','-','_' };

    char* pass = "blabla";
    printf("Char : %s\n", pass);
    int size_digest = strlen(pass) * 2 + 3;
    char* digest = malloc(size_digest);//#1 +\0
    digest[0] = '#';
    digest[1] = '1';
    unsigned int un = 0;
    unsigned int deux = 0;
    for (int i = 0; i < strlen(pass); i++)
    {
        un = (unsigned int)floor(pass[i] / 16);
        deux = (unsigned int)pass[i] % 16;
        digest[i * 2 + 2 ] = HASH[(un + (unsigned int)session_key[i] % 64) % 64];
        digest[i * 2 + 1 + 2] = HASH[(deux + (unsigned int)session_key[i] % 64) % 64];
    }
    digest[size_digest-1] = '\0';

    printf("Digest : %s\n taille : %d",digest,size_digest);

    free(digest);
    digest = 0;
    return 0;
}
 
Dernière édition:
Inscrit
31 Mars 2016
Messages
33
Reactions
0
#4
Good luck pour tout faire en C :D
 
Inscrit
2 Juin 2013
Messages
4
Reactions
0
#5
Avec un peu de temps, de volonté et d'aide ça le feras ;)
 

tazman59

Contributeur
Inscrit
20 Decembre 2012
Messages
148
Reactions
25
#6
Je suis complètement partant pour t’aider, pourquoi pas même intégrer le projet s’il le faut. :)
 
Inscrit
2 Juin 2013
Messages
4
Reactions
0
#7
Pour l'instant je n'ai pas trop le temps de me fixer bien sérieusement dessus, je fais des petits par ci par là mais merci pour ton aide quand même ;)
 
Haut Bas