You are not logged in.
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
.
A+ pour un prochain tuto ![]()
[large]Toute copie de ce tutoriel sans mon accord est non autoriser.[/large]
Offline
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 ![]()
Offline
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