Bonjour
En implementant le code de chiffrement vers du PHP j'ai
reperer une erreur qui sur le coup ma obliger à faire
quelques essaies en C.
J'ai trouver qu'a partir de certaines clefs les données
dechiffrer (ou à l'etape du chiffrement) deviennent
corromput.
Test : (compilation avec GCC (DevC++ 4.9.9.2) sous
Windows XP, systeme 32 bits)
#include <stdlib.h>
#include <stdio.h>
char *decrypt(char *buffer, char *clef, unsigned long
length) {
unsigned long cpt=0, curs=0, len=0;
unsigned int a, b, c;
a = 10;
b = 1;
c = 255;
len = strlen(clef);
while (cpt<(unsigned long)length) {
a++;
b++;
if(a > c) a -= c + 1;
if(b > c) b -= c + 1;
buffer[cpt] ^= clef[curs];
if(curs >= len) curs = 0;
buffer[cpt] ^= b + c ^ a;
buffer[cpt] -= a;
cpt++;
curs++;
}
return buffer;
}
char *encrypt(char *buffer, char *p_szKeyD, unsigned
long length){
unsigned long cpt=0,curs=0,len=0;
unsigned int _a, _b, _c;
_a = 10;
_b = 1;
_c = 255;
len = strlen(p_szKeyD);
while(cpt<(unsigned long)length)
{
_a ++;
_b ++;
if(_a > _c)_a -= _c + 1;
if(_b > _c)_b -= _c + 1;
buffer[cpt] += _a;
buffer[cpt] ^= _b + _c ^ _a;
buffer[cpt] ^= p_szKeyD[curs];
if(curs >= len)
curs = 0;
cpt++;
curs++;
}
return buffer;
}
int main(void) {
char buffer[255]; memset(buffer,0,255);
strcpy(buffer,"30/09 22:33 01-48-84-67-44
127.0.0.1\n30/09 22:34 01-48-49-54-37 127.0.0.1\n");
int len = strlen(buffer);
printf("%s\n",buffer);
char res[255]; memset(res,0,255);
strcpy(res,encrypt(buffer,"3S0Fn9gK9weR6nf2oGCrB",len));
printf("%s\n",res);
memset(buffer,0,255);
strcpy(buffer,decrypt(res,"3S0Fn9gK9weR6nf2oGCrB",len));
printf("----\n%s\n",buffer); // Corruption
system("pause");
return 0;
}
A noter que si la clef été 3S0Fn9gK9weR6n donc plus
courte, il nya aucun probleme.
J'ai utiliser le code de la version 1.3 recemment
télécharger.