Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  4 1180
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.

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;

}
Og for dere som ønsker koden litt penere formatert, så ligger koden ute på pastebin.com her:

Pastebin.com - Easy XOR cipher
Sitat av 0xFF Vis innlegg
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.

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;

}
Og for dere som ønsker koden litt penere formatert, så ligger koden ute på pastebin.com her:

Pastebin.com - Easy XOR cipher
Vis hele sitatet...
Vet ikke helt hva jeg skal svare på her, men en "funfact" om XOR "cipher" er at hvis du kjenner både "kryptert" og ukryptert tekst får du ut passordet i klartekst. Hurra!

"HELLOWORLDHELLOWORLDHELLOWORLDHELLOWORLDHELLOWO"
War room
0xFF's Avatar
Trådstarter Donor
Sitat av phish Vis innlegg
Vet ikke helt hva jeg skal svare på her, men en "funfact" om XOR "cipher" er at hvis du kjenner både "kryptert" og ukryptert tekst får du ut passordet i klartekst. Hurra!

"HELLOWORLDHELLOWORLDHELLOWORLDHELLOWORLDHELLOWO"
Vis hele sitatet...
Dette er ikkje korrekt, passordet som brukes til cipheren står i klartekst i kildekoden hvis du fått det med deg.

Kode

    memcpy ( key, "HELLOWRD",   BLOCKSIZE );
I dette tilfelle så kjenner du både til passordet som brukes til å dekryptere cipherteksten og du kjenner til cipherteksten, da burde det vel ikkje være vanskelig å dekryptere den eller?

Note: Koden som er postet er i første posten er kompilerbar og mulig for å kjøre.
WRONG!...Ignore it, you made it
Sitat av 0xFF Vis innlegg
Dette er ikkje korrekt, passordet som brukes til cipheren står i klartekst i kildekoden hvis du fått det med deg.

Kode

    memcpy ( key, "HELLOWRD",   BLOCKSIZE );
I dette tilfelle så kjenner du både til passordet som brukes til å dekryptere cipherteksten og du kjenner til cipherteksten, da burde det vel ikkje være vanskelig å dekryptere den eller?

Note: Koden som er postet er i første posten er kompilerbar og mulig for å kjøre.
Vis hele sitatet...
Jo, det jeg skriver er korrekt, og jeg har fått meg med at passordet står i klartekst. Jeg påpekte bare en "funfact" og en stor svakhet i "XOR"-cipher. Uansett, du spør ikke om noe i første posten så jeg foreslår at vi bare lar dette dø.

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

Her forklares det samme som jeg forklarte over.

If the content of any message can be guessed or otherwise known then the key can be revealed.
Vis hele sitatet...