Black Dev's Team Forum

You are not logged in.

Announcement

You have a problem about programation ? Post it on the forum !
Black devs Team Security System Coming soon.
  • Index
  •  » Computer
  •  » [TUTO-C-CRYPTAGE-FR] Cryptage par substitution (algorithme de César)

#1 09-09-2009 18:26:07

Zer01ne
Site Admin
Registered: 22-08-2009
Posts: 44
Website

[TUTO-C-CRYPTAGE-FR] Cryptage par substitution (algorithme de César)

Voila maintenant je vais vous montrer comment crypter vos texte ou autre chaines de caractère en tout genre en utilise l'algorithme de César dit Cryptage par substitution de caractère, je vais vous en expliquer les principes.

Alors c'est très simple la substitution utilise un système simple mais plutôt efficace pour crypter des données il suffi d'incrémenter d'un nombre voulu pour que l'on substitue le caractère actuel par le caractère suivant.

Exemple imaginons une la chaine 'Hello World !', une fois crypter en utilisant une substitution par nombre de 0x01 nous obtenons 'Ifmmp!Xpsme!"'

Pourquoi ?
Tout simplement parce que :

H + 1 = I
e + 1 = f
l + 1 = m
l + 1 = m
o + 1 = p
  + 1 = !
W + 1 = X
o + 1 = p
r + 1 = s
l + 1 = m
d + 1 = e
  + 1 = !
! + 1 = "

Code utiliser pour le cryptage :

char text[14] = "Hello World !";

void EncryptBuffer(char* buffer, int permute)
{
    int i = 0;
    for(i = 0; i < strlen(buffer); i++){
        buffer[i] = buffer[i] + permute;
    }
}
void DecryptBuffer(char* buffer, int permute)
{
    int i = 0;
    for(i = 0; i < strlen(buffer); i++){
        buffer[i] = buffer[i] - permute;
    }
}

int main(int argc, char *argv[])
{
    // Encrypt le texte avec une substitution par différence de + 0x01
    EncryptBuffer(text, 0x01);

    // Decrypt le texte avec une substitution par différence de + 0x01
    DecryptBuffer(text, 0x01);

    return 0;
}

Vous comprenez ?

Il existe une autre façon de crypter de cette façon mais en utiliser un opérateur différent de '+' ou de '-' cette opérateur est XOR opérateur '^'.

Comment fonctionne XOR '^'
XOR est un opérateur logique qui de façon identique que + ou - crypte les caractères Pour en savoir plus sur XOR

Donc voila comment cela fonctionne :
'Hello World' ! devient 'Idmmn!Vnsme!'

H + 1 = I
e - 1 = d
l + 1 = m
l + 1 = m
o - 1 = n
  + 1 = !
W - 1 = V
o - 1 = n
r + 1 = s
l + 1 = m
d + 1 = e
  + 1 = !
! - 1 =

Code utiliser pour le cryptage :

char text[14] = "Hello World !";

void CipherBuffer(char* buffer, int permute)
{
    int i = 0;
    for(i = 0; i < strlen(buffer); i++){
        buffer[i] = buffer[i] ^ permute;
    }
}

int main(int argc, char *argv[])
{
    // Encrypt le texte avec une substitution par différence de ^ 0x01
    CipherBuffer(text, 0x01);

    // Decrypt le texte avec une substitution par différence de ^ 0x01
    CipherBuffer(text, 0x01);

    return 0;
}

Maintenant pour utilise le code c'est très simple :

/*
* @param buffer = Texte ou chaine a encrypter
* @param permute = Nombre (0xXX) pour la différence de caractère
*/
void CipherBuffer(char* buffer, int permute)
{
    int i = 0;
    for(i = 0; i < strlen(buffer); i++){
        buffer[i] = buffer[i] ^ permute;
    }
}

Voila tout est terminer vous savez a peut près tout sur l'algorithme de cryptage par substitution de caractère (algorithme de César), noter que vous pouvez vous même améliorer cette algorithme pour le rendre bien plus efficace et difficile a décrypter, et n'hésiter pas a nous faire parvenir sur ce topic vos amélioration wink.

A+ pour un prochain tuto wink

[large]Toute copie de ce tutoriel sans mon accord est non autoriser.[/large]

Offline

 

#2 11-09-2009 16:13:50

G4uT!3_R
Black Dev's Team
Registered: 24-08-2009
Posts: 5

Re: [TUTO-C-CRYPTAGE-FR] Cryptage par substitution (algorithme de César)

char text[14] = "Hello World !";

void EncryptBuffer(char* buffer, int permute)
{
    int size;
    int i;

    size = strlen(buffer);
    for(i = 0; i < size; i++){
        buffer[i] = buffer[i] + permute;
    }
}
void DecryptBuffer(char* buffer, int permute)
{
    int size;
    int i;

    size = strlen(buffer);
    for(i = 0; i < size; i++){
        buffer[i] = buffer[i] - permute;
    }
}

int main(int argc, char *argv[])
{
    // Encrypt le texte avec une substitution par différence de + 0x01
    EncryptBuffer(text, 0x01);

    // Decrypt le texte avec une substitution par différence de + 0x01
    DecryptBuffer(text, 0x01);

    return 0;
}

C'est un peu plus optimiser de cette manière.
Sinon bon tuto wink

Offline

 

#3 11-09-2009 18:57:07

Zer01ne
Site Admin
Registered: 22-08-2009
Posts: 44
Website

Re: [TUTO-C-CRYPTAGE-FR] Cryptage par substitution (algorithme de César)

Merci.

De l'optimisation en veut tu en voila.

enum CipherMode
{
    CIPHER_MODE_ENCRYPT = 0,
    CIPHER_MODE_DECRYPT = 1
};

void CipherBuffer(char* buffer, int permute, int mode)
{
    int i;
    int size = strlen(buffer);

    for(i = 0; i < size; i++)
    {
        if(mode == CIPHER_MODE_ENCRYPT)
            buffer[i] = buffer[i] + permute;
        if(mode == CIPHER_MODE_DECRYPT)
            buffer[i] = buffer[i] - permute;
    }
}

int main(int argc, char *argv[])
{
    // Encrypt le texte avec une substitution par différence de + 0x01
    CipherBuffer(text, 0x01, CIPHER_MODE_ENCRYPT);

    // Decrypt le texte avec une substitution par différence de + 0x01
    CipherBuffer(text, 0x01, CIPHER_MODE_DECRYPT);

    return 0;
}

Offline

 
  • Index
  •  » Computer
  •  » [TUTO-C-CRYPTAGE-FR] Cryptage par substitution (algorithme de César)

Board footer

Propulsé par FluxBB
Traduction par FluxBB.fr