Springen naar inhoud

Checksum


  • Log in om te kunnen reageren

#1

johannesen

    johannesen


  • >25 berichten
  • 30 berichten
  • Gebruiker

Geplaatst op 03 juni 2010 - 19:19

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:

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); 
}

Veranderd door jhnbk, 04 juni 2010 - 14:52
code-tags toegevoegd


Dit forum kan gratis blijven vanwege banners als deze. Door te registeren zal de onderstaande banner overigens verdwijnen.

#2

jhnbk

    jhnbk


  • >5k berichten
  • 6905 berichten
  • VIP

Geplaatst op 04 juni 2010 - 14:51

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.

#3

Rogier

    Rogier


  • >5k berichten
  • 5679 berichten
  • VIP

Geplaatst op 04 juni 2010 - 14:58

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.

#4

317070

    317070


  • >5k berichten
  • 5567 berichten
  • Moderator

Geplaatst op 04 juni 2010 - 18:52

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-

#5

E.Desart

    E.Desart


  • >1k berichten
  • 2391 berichten
  • VIP

Geplaatst op 04 juni 2010 - 19:21

List of hash functions
This is a list of hash functions, including cyclic redundancy checks, checksum functions, and cryptographic hash functions.
http://en.wikipedia...._hash_functions

Category:Checksum algorithms
http://en.wikipedia....ksum_algorithms
Eric





0 gebruiker(s) lezen dit onderwerp

0 leden, 0 bezoekers, 0 anonieme gebruikers

Ook adverteren op onze website? Lees hier meer!

Gesponsorde vacatures

Vacatures