Checksum

Moderators: jkien, Xilvo

Reageer
Berichten: 30

Checksum

goedenavond allemaal

kan er iemand een uitgewerkt voorbeeld van een checksum geven en gedetailleerd uitleggen ?

ik moet enkel weten hoe men een checksum maakt

ik zal zelf een voorbeeld geven waar ik niet uit geraak omdat ik niet begrijp hoe de checksum wordt berekend:

hier wordt een checksum gemaakt in de ip-laag:

Code: Selecteer alles

void make_ping_answer_from_request(uint8_t *buf)

{

uint8_t i=0;

buf[34]=0x00;

 

unsigned int checksumvar;

 

   

while(i<6){

   

buf[0+i]=buf[6+i];

buf[6+i]=mymac[i];

i++;

}

i=0;

while(i<4){

buf[30+i]=buf[26+i];

buf[26+i]=myip[i];

i++;

}

buf[36]=0;

buf[37]=0;

checksumvar=checksum((&buf[34]),40,0);

buf[36]=checksumvar >> 8;

buf[37]=checksumvar & 0x00ff;

// eth+arp is 74 bytes:

enc28j60PacketSend(74,buf);

}

hier gebeurt de checksum in de udp-laag

void make_udp_answer_from_request(uint8_t *buf, uint16_t len, int cmd)

{

int i;

unsigned int checksumvar;

uint16_t des_port = 61558;

// ip omdraaien

for (i=0;i<4;i++)

{

buf[30+i] = buf[26+i];

buf[26+i] = myip[i];

}

// mac omdraaien

for (i=0;i<6;i++)

{

buf[0+i] = buf[6+i];

buf[6+i] = mymac[i];

}

// poorten veranderen

for (i=0;i<2;i++)

{

buf[34+i] = buf[36+i];

}

buf[36] = des_port >>8;

buf[37] = des_port & 0x00ff;

//	data veranderen

if (cmd == 1) {

buf[42] = 0x61;

}

if (cmd == 0) {

buf[42] = 0x75;

}

// checksum veranderen

buf[40]=0;

buf[41]=0;

checksumvar=checksum((&buf[26]),buf[39]+8,1);

buf[40]=checksumvar >> 8;

buf[41]=checksumvar & 0x00ff;

enc28j60PacketSend(60,buf); 

}

Gebruikersavatar
Berichten: 6.905

Re: Checksum

Verplaatst naar het betreffende vakforum.
Het vel van de beer kunnen verkopen vraagt moeite tenzij deze dood voor je neervalt. Die kans is echter klein dus moeten we zelf moeite doen.

Gebruikersavatar
Berichten: 5.679

Re: Checksum

Heb je ergens een referentie van wat voor crc eruit moet komen? Zo ja, geeft die van jou iets anders? (want misschien gaat er wel op een ander niveau iets fout en zit je voor niks hier te zoeken, wat niet onwaarschijnlijk is met dit soort code).

Zo nee, zoek even een duidelijke specificatie van hoe die checksum er precies uit moet zien (ik zou googlen op iets als tcp udp checksum, bijvoorbeeld dit).
In theory, there's no difference between theory and practice. In practice, there is.

Gebruikersavatar
Berichten: 5.609

Re: Checksum

ik moet enkel weten hoe men een checksum maakt
Er zijn extreem veel soorten checksums, met extreem veel variërende toepassingen. Wil je fouten detecteren of ook corrigeren? Of wil je enkel je fouten kunnen lokaliseren? Wat is de verdeling van de fouten in je data? Hoe moet de verdeling van je fouten na correctie er uit zien? Mag de checksum eenvoudig te manipuleren zijn door je data aan te passen of niet? Moet je checksum collisions kunnen maken, of juist niet? Moet de berekening symmetrisch gebeuren, of niet?

Basically maak je van de data die je verstuurd een berekening die een 'vrij' kort getal uitkomt. Dat getal verstuur je dan met je data. De ontvanger kan dan dezelfde berekeningen maken op die data, en als hij hetzelfde getal uitkomt, is de data hoogstwaarschijnlijk goed verstuurd. Dat getal noemen ze dan de checksum.

Maar zoals je ziet kun je dat nog enorm uitbreiden. Dus ga je wat specifieker moeten zijn in je vraag. Waarvoor wil je het gaan gebruiken?
What it all comes down to, is that I haven't got it all figured out just yet

And I've got one hand in my pocket and the other one is giving the peace sign

-Alanis Morisette-

Gebruikersavatar
Berichten: 2.391

Re: Checksum

List of hash functions

This is a list of hash functions, including cyclic redundancy checks, checksum functions, and cryptographic hash functions.

http://en.wikipedia.org/wiki/List_of_hash_functions

Category:Checksum algorithms

http://en.wikipedia.org/wiki/Category:Checksum_algorithms
Eric

Reageer