Avatar billede h7iws Nybegynder
15. januar 2005 - 03:11 Der er 12 kommentarer og
1 løsning

XOR kryptering.

Jeg vil gerne vide hvordan et evt. XOR krypterings-program kunne se ud, kravene til programmet er at man skal kunne vælge en key selv, på en længde man selv vælger.
Programmet skal desuden være i stand til at læse data fra en fil og skrive det til en anden fil.

Men ikke nok med det, jeg vil også gerne have en hel del kommentarer til hvad der sker i programmet og hvorfor lige denne funktion er smart mv.

Jeg har kendskab til XOR's funktion og hvordan krypteringen virker, men jeg kan ikke få lære/skrive delen til at virke og ved ikke hvordan jeg skal håndtere dataet fra filen ...

Håber at i kan hjælpe og vil hjælpe mig.
Mvh Smily
Avatar billede arne_v Ekspert
15. januar 2005 - 10:01 #1
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main()
{
  int i;
  char plain[] = "ONETIMEPAD";
  char key[] = "TBFRGFARFM";
  char *cipher;
  int l = strlen(plain);
  cipher = (char *)malloc(l);
  for(i=0;i<l;i++) cipher[i] = plain[i] + key[i % strlen(key)];
  cipher[l] = '\0';
  printf("%s -> %s\n",plain,cipher);
  for(i=0;i<l;i++) plain[i] = cipher[i] - key[i % strlen(key)];
  plain[l] = '\0';
  printf("%s -> %s\n",cipher,plain);
}
Avatar billede arne_v Ekspert
15. januar 2005 - 10:02 #2
Du ville bruge XOR så er det:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main()
{
  int i;
  char plain[] = "Dette er en lille test";
  char key[] = "TBFRGFARFM";
  char *cipher;
  int l = strlen(plain);
  cipher = (char *)malloc(l);
  for(i=0;i<l;i++) cipher[i] = plain[i] ^ key[i % strlen(key)];
  cipher[l] = '\0';
  printf("%s -> %s\n",plain,cipher);
  for(i=0;i<l;i++) plain[i] = cipher[i] ^ key[i % strlen(key)];
  plain[l] = '\0';
  printf("%s -> %s\n",cipher,plain);
}
Avatar billede h7iws Nybegynder
15. januar 2005 - 21:59 #3
Takker, det er da svar på en del af spørgsmålet, men de funktioner du bruger kender jeg ikke helt 100%, f.eks. den funktion der hedder malloc, jeg skrev at jeg meget gerne ville have et par kommentarer knyttet til koden, så hvis du har tid må du gerne skrive lidt fra linien med malloc til linien " plain[l] = '\0'; "

*Smil
Avatar billede h7iws Nybegynder
15. januar 2005 - 22:04 #4
Jeg får desuden flg. fejl når jeg prøver dit program med XOR metoden ... ?

29 D:\Programmer\Dev c++\Makefile.win [Warning] overriding commands for target `"XOR'
26 D:\Programmer\Dev c++\Makefile.win [Warning] ignoring old commands for target `"XOR'
make.exe D:\Programmer\Dev c++\make.exe Circular "XOR <- "XOR dependency dropped.

Hvorfor det?
Avatar billede arne_v Ekspert
15. januar 2005 - 22:06 #5
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main()
{
  int i;
  char plain[] = "Dette er en lille test";
  char key[] = "TBFRGFARFM";
  char *cipher;
  int l = strlen(plain);
  cipher = (char *)malloc(l);  /* alloker dynamisk plads til de krypterede (fylder samme som det ukrypterede) */
  for(i=0;i<l;i++) cipher[i] = plain[i] ^ key[i % strlen(key)]; /* krypter hver enkelt byte */
  cipher[l] = '\0'; /* nul terminering - faktisk overflødig da cipher er binær ! */
  printf("%s -> %s\n",plain,cipher); /* udskriv - bemærk at cipher er binær og garbage */
  for(i=0;i<l;i++) plain[i] = cipher[i] ^ key[i % strlen(key)]; /* dekrypter hver byte */
  plain[l] = '\0'; /* nul termininering - og her gør den nytte */
  printf("%s -> %s\n",cipher,plain);
}
Avatar billede arne_v Ekspert
15. januar 2005 - 22:08 #6
Hm.

Der er vist et eller andet koks med dit dev-cpp projekt.

Prøv og lav et nyt i et andet dir.
Avatar billede arne_v Ekspert
15. januar 2005 - 22:09 #7
malloc : allokerer memory
strlen : finder længden af en streng
Avatar billede h7iws Nybegynder
15. januar 2005 - 22:15 #8
Ahh, det er sq kanon, tusinde tak skal du have ... hvordan giver jeg dig så de point ?
*smil
Avatar billede arne_v Ekspert
15. januar 2005 - 22:36 #9
jeg ligger et svar og du accepterer
Avatar billede h7iws Nybegynder
15. januar 2005 - 22:50 #10
Det er bare iroden :D takker mange gange :D
Avatar billede h7iws Nybegynder
16. januar 2005 - 17:59 #11
ahh, tror at jeg skulle trykke på den knap en hel del gang før den forstod det !!!
Men nu virker det vist !
Avatar billede arne_v Ekspert
16. januar 2005 - 18:00 #12
hemligheden er at man skal markere navnet ude til højre så det er blåt
inden man klikker accepter.
Avatar billede h7iws Nybegynder
19. januar 2005 - 16:38 #13
hmm, smart !
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester