Gå til innhold

Anbefalte innlegg

I boka så var det lengere bak en oppgave med å kryptere et eller annet, og har

jeg har tenkt litt på å lage et krypteringsprogram da som da kan kryptere setninger.

Det skal foregå slik: Finner ut hvor mange tegn det er i setningen, går gjennom hvert tegn ved å bruke en for løkke, bruker random funksjonen til å definere et tilfeldig tall som den da blir flyttet noen hakk frem, eller tilbake. Dette tror jeg at jeg kan klare, så nå er liksom setningen kryptert da.

Men så er det dekrypteringa som muligens blir et problem, jeg brukte jo random tall til å kryptere setningen så det skal jo liksom være "random" da.

Er det noen som kan komme på noen måte å dekryptere setningen på da?

Har tengt litt på å kansje legge en kryptert kode i slutten av hver setning som sjuler hvordan man skal dekryptere den. Så er spørsmålet som følger: Er dette mulig? er sikkert mulig å lage et krypteringsprogram, det fins det jo mange av. Men tror dere det er mulig å få dekryptert det når jeg krypterer det med random numbers?

Lenke til kommentar
Videoannonse
Annonse

Litt langt skudd, men du kan prøve å ta en titt på vanlige enkrypsjons algoritmer, f.eks MD5 eller DES.

Mener også å huske at det følger en funksjon med gcc-includes som skulle kunne gjøre jobben...

 

 

CRYPT(3)                Library functions                CRYPT(3)

 

NAME

      crypt - password and data encryption

 

SYNOPSIS

      #define _XOPEN_SOURCE

      #include <unistd.h>

 

      char *crypt(const char *key, const char *salt);

Lenke til kommentar
Litt langt skudd, men du kan prøve å ta en titt på vanlige enkrypsjons algoritmer, f.eks MD5 eller DES.

Mener også å huske at det følger en funksjon med gcc-includes som skulle kunne gjøre jobben...

 

 

CRYPT(3)                Library functions                CRYPT(3)

 

NAME

       crypt - password and data encryption

 

SYNOPSIS

       #define _XOPEN_SOURCE

       #include <unistd.h>

 

       char *crypt(const char *key, const char *salt);

Kan ikke så mye om sånn #define og sånt enda ihvertfall, men det må vel gå ann uten bruk av sånne greier?

Lenke til kommentar

bruk av random gjør nok krypteringsideen din en smule feil. samme tekststreng vil da gi forskjellige ciphertekst hver gang - noe som gjør det nærmest umulig å dekryptere.

 

bruk heller en key (passord) som du baserer variasjonene i krypteringen på. normalt er å bruke primtall (eller lukas tall for den saks skyld) og/eller modulo matematikk for å konstruere cipherteksten.

Lenke til kommentar

Oppgave §7.10[9] (s. 164) i TC++PL inneholder en grei nok krypterings/dekrypterings-jobb. Oppgaven er å ta imot input, lage en nøkkel-streng og bruke XOR for å kryptere teksten med nøkkelen. Hvis du krypterer resultatet du fikk da du krypterte teksten din (med samme nøkkel), vil du få den originale teksten. (Altså, for å dekryptere krypterer du den krypterte strengen.)

 

En slik krypteringsfunksjon er langt fra sikker (neste oppgave er å skrive et program som dekrypterer uten å vite nøkkelen...), men er mer enn sikker nok for litt "hverdagslig bruk".

 

Du trenger sannsynligvis ikke så veldig mye kode for å implementere et slikt krypteringsprogram. Min implementasjon var på 23 linjer, hvis jeg ikke husker feil. Jeg har ikke fortalt alle hintene som står i oppgaven, for å la deg ta noen design-beslutninger selv. Hvis du vil prøve å lage et slikt program, og du står fast, kan du alltids sende meg en privat melding, og så kan du få flere hint :)

 

 

XOR av en bokstav er forresten slik:

char enc_char = c ^ key[i];

Lenke til kommentar
Oppgave §7.10[9] (s. 164) i TC++PL inneholder en grei nok krypterings/dekrypterings-jobb. Oppgaven er å ta imot input, lage en nøkkel-streng og bruke XOR for å kryptere teksten med nøkkelen. Hvis du krypterer resultatet du fikk da du krypterte teksten din (med samme nøkkel), vil du få den originale teksten. (Altså, for å dekryptere krypterer du den krypterte strengen.)

 

En slik krypteringsfunksjon er langt fra sikker (neste oppgave er å skrive et program som dekrypterer uten å vite nøkkelen...), men er mer enn sikker nok for litt "hverdagslig bruk".

 

Du trenger sannsynligvis ikke så veldig mye kode for å implementere et slikt krypteringsprogram. Min implementasjon var på 23 linjer, hvis jeg ikke husker feil. Jeg har ikke fortalt alle hintene som står i oppgaven, for å la deg ta noen design-beslutninger selv. Hvis du vil prøve å lage et slikt program, og du står fast, kan du alltids sende meg en privat melding, og så kan du få flere hint :)

 

 

XOR av en bokstav er forresten slik:

char enc_char = c ^ key[i];

Jo takk for det :), men hva mener du med XOR og nøkkel-ord? Mulig at jeg er litt treg azz men...

 

EDIT: Er foresten uten kompilaor her nå så får ikke prøvd meg noe frem enda (er ikke på min maskin i helga) men jeg har prøvd å laste ned Dev-C++ kompilatoren men så klarte jeg å kødde det til å sletta hele greia uten å avinstalere den først, noen som har noen forslag til en annen gratis kompilator??

Endret av zirener
Lenke til kommentar

XOR, eller "eXclusive OR", er en type binær matematikk.

 

Kort sagt betyr det "set bit'en hvis én av, men ikke begge, bit'ene er 1".

 

Altså:

   0100
^ 1101
= 1001

 

Nøkkelen kan du se på som et slags passord.

 

Hvis stringen vi skal kryptere er "Hello world", og nøkkelen er "155", vil den første krypterte bokstaven bli:

   1001000   // ASCII-verdien til 'H' i binær
^ 0110001   // ASCII-verdien til '1' i binær
= 1111001   // Den krypterte bokstaven

 

Hvis vi da 'krypterer' 1111001 (resultatet av krypteringen) med nøkkelen (dvs., første tegn av nøkkelen) igjen, får vi:

   1111001   // Den krypterte bokstaven
^ 0110001   // ASCII-verdien til '1' i binær
= 1001000   // Den dekrypterte bokstaven -- Tilfeldigvis en 'H' =)

 

 

Det er virkemåten bak. Alt du egentlig trenger å vite om XOR i krypteringsprogrammet er c ^ key

 

 

Du finner Borland sin gratis kompilator på www.borland.com. Tror du må registrere deg, men du slipper å få noe spam e.l. Når du har lastet den ned, les readme.txt, lag bcc32.cfg og ilink32.cfg slik det står, og du er klar til å kompilere.

Lenke til kommentar

^ Der :)

Skjønte ikke for mye for å si det sånn, men uansett den borland kompilatoren må man ikke legge til noen sånne filer og sånn?

Har prøvd å laste ned den men uten suksess...

EDIT: Skjønner sikkert mer av den nøkkel greia når jeg får begynt med det... :ermm: håper jeg...

Fikk lurt seg inn noen leifer her og ja

EDIT2:Du har forklart de greiene ja, fint, med de filene og sånt. Men på sidndrem sto det at det var mange flere filer som måtte inkluderes, stemmer ikke det?

Endret av zirener
Lenke til kommentar

Det står i readme.txt. Kort sagt, du må ha:

 

-I"C:\Borland\BCC55\Include"
-L"C:\Borland\BCC55\Lib"

 

i bcc32.cfg og bare -L-linja i ilink32.cfg. Det er alt du trenger å legge til av filer.

 

 

(Det er forresten kanskje ikke nødvendig å sitere hele posten min, når den står rett ovenfor...?)

Endret av Myubi
Lenke til kommentar

Ok, skal skjerpe meg her nå da :p:yes:

Det første test krypteringsprogrammet er foresten ferdig uten så alt for mye tull :)

 

EDIT:Nok en leif eller to (eller tre, eller fire eller fem)

EDIT2:Og Legion: Det funka fint med random :green:

Må bare finne en måte å putte alt sammen.Jeg lagra alle random nummerene i en tabell så jeg ser hvor mye hver er blitt flyttet. Det neste blir å kombinere dette på en eller annen måte å lage en formel så det kan bli dekryptert.

Hoo... tungvint forklart :p

Endret av zirener
Lenke til kommentar

Jjeg har nå prøvd å laget det krypterings programmet som jeg nevnte tidligere i posten ferdig (forklarte litt av dette i den forige posten men)ved å bruke random numbers.

programmet ligger pastet HER

Nå er problemet at det ikke er mulig å finn ut hvordan jeg skal få dekryptert koden ved å se på den krypterte koden. Da er spørsmålet om noen har noen ide til å få dekryptert koden uten å måtte finne ut hvordan det er kryptert(for det har lagret i en tabell). Hvis noen ikke helt skjønner hva jeg mener så er det kansje lettere å ta en liten titt på kildekoden.

 

EDIT:Leif igjen...

EDIT:En stor feil(rettet)

Endret av zirener
Lenke til kommentar

Tok en rask titt på koden.

 

1) std::string (<string>)

2) std::string::iterator (<string>)

3) std::strlen() (<cstring>) / std::string::size() (<string>)

4) #include <iostream>

5) #include <cstdlib>

6) Vi bruker små bokstaver på variabelnavn, gjør vi ikke?

 

 

For å besvare spørsmålet ditt: Ta imot nøkkelen (Kryptnummer) fra brukeren, både ved kryptering og dekryptering. Eksempel på IO fra et slikt program kan være:

 

Welcome.
> encrypt
Encrypting chosen. Enter key:
> 5546
Key is '5546'. Enter text to encrypt:
> Hallo
Encrypted text is: Mfqst
> decrypt
Decrypting chosen. Enter key:
> 5546
Key is '5546'. Enter encrypted text: 
> Mfqst
Decrypted text is: Hello
> quit
Good bye.

// H + 5 = M
// a + 5 = f
// l + 4 = q
// l + 6 = s
// o + 5 = t

 

 

Du bør dessuten tillate nøkler og tekst-strenger med ubegrenset lengde. Nok en gang, se std::string.

Endret av Myubi
Lenke til kommentar

I boka mi står det at man skal/burde bruke store fordi nesten alle systemord og sånt er skrevet med små så hvis man bruker et system ord som variabel navn vil ikke dette påvirke noe

Vet det der med string og sånt men tenkte å gjøre ting etter boka(selv om oppgaven var en jeg fant på selv)

Har sett litt på string og sånt uten å skjønne så mye av det, det er så lite forklart.

 

EDIT:Kan foresten noen forklare litt syntaksen på hvordan man bruker string?

Endret av zirener
Lenke til kommentar

RTFM.

 

"Systemord"? Jeg antar du mener identifiers ("identifikatorer"?) lagt til av en headerfil/et bibliotek. (Kompilatoren bruker _ foran navnene sine, så den er ikke noe problem). Det er sjeldent du bruker samme navn som de som allerede eksisterer i en header. Hvis du hadde brukt <iostream>, <cstdlib> osv, ville dessuten "system"-funksjonene vært i namespace std, og du hadde uansett sluppet navnekræsj. Ikke at det er noe særlig problem i små programmer uansett. I tillegg vet du som regel hvilke navn en headerfil legger til. Uansett om det hadde vært et problem er det "bad programming practise" å ha stor/liten bokstav som eneste forskjell på identifier-navn.

Endret av Myubi
Lenke til kommentar

^

Jeg mener sånne ord som cout og cin men det er jo derfor man bruker namespace men siden boka mi og kompilatoren min er litt gammel så er det en regel der (skønner at det er en vane jeg burde bli kvitt :) )

 

EDIT:Er blitt lei av alle de leifene azz... :thumbdown:

EDIT2: Systemord, identifikatorer er ikke helt sikker på alle de navnene der jeg :blush:

Endret av zirener
Lenke til kommentar

Hvorfor bruke ord som cout og cin? Man vet at man ikke skal bruke det uansett.

 

En identifier er ganske enkelt et navn på en variabel, en funksjon, en klasse, e.l. Kort sagt et navn i C++.

 

"Systemord" var det du som brukte. Det er ikke noe i C++ som heter det.

 

 

Kompilatoren din støtter vel nye headere? Det er vel helst boken som er problemet. Les en oppdatert en, du, gjerne en på engelsk ;)

 

 

Edit: Vil bare understreke at hvis man skulle finne på å bruke et ord som allerede er tatt, så vil uansett kompilatoren vennlig irettesette deg.

Endret av Myubi
Lenke til kommentar

For å være litt "lur" så kjøpte jeg den kompilatoren boka tok for seg jeg :w00t:

så jeg tror ikke den støtter nye headdere, og i boka mi så står det at det er noe som heter systemord, det er jeg ganske sikker på :hmm:

Og jeg har tengt til å kjøpe en ny(engelsk) bok når jeg blir ferdig med den jeg holder på med nå, jeg skal kjøpe enda en grunnlegende så jeg kan få oppdatert meg litt med de nye greiene, men det er lettere å lære hvertfall det mest grunnlegende på språk jeg er sikker på(syns jeg da).

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...