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
Annonceindlæg fra Arctic Wolf
08. januar 2004 - 12:35
#1
En lille C finesse ! en byte XOR sig selv = en nul byte og nul byte = slut på streng
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
08. januar 2004 - 12:38
#3
hvad kan man så gøre ??
08. januar 2004 - 12:41
#4
hvordan laver man det så om til hex ?
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.
08. januar 2004 - 12:59
#6
=) ok
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; }
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.
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?
22. januar 2004 - 13:40
#10
Ja da. kryptering = XOR + bin2hex dekryptering = hex2bin + samme XOR
23. januar 2004 - 22:17
#11
Lukke tid ?
Kurser inden for grundlæggende programmering