Jeg skrev en C XOR cipher i går til en konkurranse, men den ble dessverre ikkje tatt med. Så jeg tenkte jeg skulle posten kildekoden her på freakforum å se hvem som klarer å løse den, eller finne twisten i den å få den korrekt output er vel mer riktig å si.
Selve kildekoden er ikkje skrevet for nybegynnere, men har du litt erfaring ( 1 år++ ) i C, så bør du værtfall ha en grei forståelse av hva som foregår, og muligens skjønne hva du må gjøre for å løse den.
Da det er vanskelig å gjennomføre en konkurranse på freakforum uten at alle ser hva hvem har svart, så blir ikkje denne gjennomført som en konkurranse, men heller som en oppgave for dem som ønsker å prøve å løse den.
Og for dere som ønsker koden litt penere formatert, så ligger koden ute på pastebin.com her:
Pastebin.com - Easy XOR cipher
Selve kildekoden er ikkje skrevet for nybegynnere, men har du litt erfaring ( 1 år++ ) i C, så bør du værtfall ha en grei forståelse av hva som foregår, og muligens skjønne hva du må gjøre for å løse den.
Da det er vanskelig å gjennomføre en konkurranse på freakforum uten at alle ser hva hvem har svart, så blir ikkje denne gjennomført som en konkurranse, men heller som en oppgave for dem som ønsker å prøve å løse den.
Kode
#include <stdio.h> #include <stdlib.h> #include <string.h> #define BLOCKSIZE 8 #define TEXTSIZE 32 #define CIPHER(X,Y,Z)(*( X + Z ) ^= *( Y + Z )) int cipher ( char *text, char *key ) { for ( int c = 0; c < BLOCKSIZE; c++ ) { CIPHER ( text, key, c ); } return 0; } int main ( int argc, char **argv ) { char *key, *result, *text; char msg [] = { 0x1F, 0x17, 0x03, 0x02, 0x08, 0x76, 0x52, 0x6A, 0x66, 0x6B, 0x05, 0x2B, 0x21, 0x38, 0x20, 0x21, 0x68, 0x2C, 0x38, 0x60, 0x6F, 0x2E, 0x3D, 0x31, 0x68, 0x28, 0x2D, 0x28, 0x2A, 0x77, 0x3B, 0x30 }; key = malloc ( sizeof ( char ) * BLOCKSIZE ); result = malloc ( sizeof ( char ) * TEXTSIZE ); text = malloc ( sizeof ( char ) * BLOCKSIZE ); memset ( result, 0x00, TEXTSIZE ); memcpy ( key, "HELLOWRD", BLOCKSIZE ); for ( int c = 0; c < TEXTSIZE; c += BLOCKSIZE ) { memset ( text, 0x00, BLOCKSIZE ); memcpy ( text, ( msg + c ), BLOCKSIZE ); cipher ( text, key ); memcpy (( result + c ), text, BLOCKSIZE ); } printf ( "%s\n", result ); free ( key ); free ( result ); free ( text ); return 0; }
Pastebin.com - Easy XOR cipher