Avatar billede mad_man Nybegynder
08. januar 2004 - 12:15 Der er 10 kommentarer og
1 løsning

krypterings key.

jeg har lidt kode :)

char Key[100] = "12345678901234567890";
    time_t t = time(NULL);
    strftime(buf,sizeof(buf),"%S%S%S%H%M%S%S%M%S%M%H%S%M%S%M%H%H%M%S%M%H%S%H%M%S%S%S",localtime(&t));
    Edit4->Text = buf;
    int i;
    char Plaintext[100] = "";                          //variabel til teksten
    strcat(Plaintext,Edit1->Text.c_str());          //få variabelen fra tekstboxen
    int l = strlen(Plaintext);
    char Resultat[100] = "";
    for(i=0;i<l;i++)
        {
                buf[i] = buf[i] + Key[i];
        }
    Edit5->Text = buf;
    for(i=0;i<l;i++)
        {
                Resultat[i] = Plaintext[i] ^ buf[i]; // Plaintext[i] + Key[i];
        }
    Resultat[l] = '\0';
    Edit2->Text = Resultat;

hvis at det falder sammen så at det der kommer til og stå i den krypetert key (buf) falder sammen med et af de det står i plain tekst så dur det ikke..

fx hvis buf[10] er a
og Plaintext[10] er a
så vil den ik lave resten af den string om så bliver resten bare væk ???

/mad_man
Avatar billede arne_v Ekspert
08. januar 2004 - 12:35 #1
En lille C finesse !

en byte XOR sig selv = en nul byte

og nul byte = slut på streng
Avatar billede arne_v Ekspert
08. januar 2004 - 12:37 #2
Output fra kryptering kan normalt antage alle værdier 0-255 og er derfor
ikke egnet til visning.

Muligheder:

1)  vis det krypterede som hex
2)  vælg en special krypering hvor output altid vil være text
Avatar billede mad_man Nybegynder
08. januar 2004 - 12:38 #3
hvad kan man så gøre ??
Avatar billede mad_man Nybegynder
08. januar 2004 - 12:41 #4
hvordan laver man det så om til hex ?
Avatar billede arne_v Ekspert
08. januar 2004 - 12:58 #5
ENten må du bruge sprintf/sscanf med %2X eller så lave noget hånd kode.

Jeg kan godt lave et eksempel.

Senere.
Avatar billede mad_man Nybegynder
08. januar 2004 - 12:59 #6
=) ok
Avatar billede arne_v Ekspert
08. januar 2004 - 18:37 #7
#include <stdio.h>
#include <string.h>

char tohex(int val)
{
  return (val < 10) ? ('0' + val) : ('A' + val - 10);
}

int fromhex(char c)
{
  return (c < 'A') ? (c - '0') : (c - 'A' + 10);
}

void bin2hex(char *s1, int n1, char *s2)
{
  int i;
  int ix = 0;
  for(i=0;i<n1;i++)
  {
      s2[ix] = tohex((s1[i] >> 4) & 0x0F);
      ix++;
      s2[ix] = tohex(s1[i] & 0x0F);
      ix++;
  }
  s2[ix] = '\0';
}

void hex2bin(char *s1, char *s2, int *n2)
{
  int i;
  for(i=0;i<strlen(s1)/2;i++)
  {
      s2[i] = (fromhex(s1[2*i]) << 4) | fromhex(s1[2*i+1]);
  }
  *n2 = strlen(s1)/2;
}

int main()
{
  int l;
  char s1[10] = "ABC";
  char s2[10];
  char s3[10];
  bin2hex(s1,3,s2);
  hex2bin(s2,s3,&l);
  s3[l] = '\0';
  printf("%s -> %s -> %s\n",s1,s2,s3);
  return 0;
}
Avatar billede arne_v Ekspert
08. januar 2004 - 18:38 #8
Det er kun bin2hex og hex2bin (+ de 2 hjælpe funktioner tohex og fromhex)
du skal bruge.

Min main er kun til test - og den forudsætter at det er læsbare tegn, hvilket
dine jo netop ikke er.
Avatar billede trexy Nybegynder
22. januar 2004 - 13:09 #9
Er det mulig og dekrypter fra det output der kommer fra s2, til det input som man skrev i s1?
Avatar billede arne_v Ekspert
22. januar 2004 - 13:40 #10
Ja da.

kryptering = XOR + bin2hex

dekryptering = hex2bin + samme XOR
Avatar billede arne_v Ekspert
23. januar 2004 - 22:17 #11
Lukke tid ?
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