Menu

#1 Corruption de données

open
nobody
None
5
2006-10-01
2006-10-01
Anonymous
No

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.

Discussion


Log in to post a comment.

MongoDB Logo MongoDB