05. februar 2002 - 23:59Der er
11 kommentarer og 1 løsning
Delphi oversættelse?
Hej eksperter...
- Jeg har rodet lidt rundt på nettet for at finde nogle små kode-eksmpler på kryptering. Jeg har fundet dette lille stykke Delphi/Pascal kode, som jeg meget gerne vil have oversat til C++... Jeg har selv forsøgt, men eftersom jeg ikke kender så meget til Delphi, gik det ikke så frygtelig godt! =) Håber i kan hjælpe! =)
program Crypt; {$APPTYPE CONSOLE} uses Windows;
var key, text, longkey, result : string; i : integer; toto, c : char; F : TextFile; begin writeln('Enter the key:'); readln(key); writeln('Enter the text:'); readln(text);
for i := 0 to (length(text) div length(key)) do longkey := longkey + key;
for i := 1 to length(text) do begin toto := chr((ord(text[i]) XOR ord(longkey[i]))); // XOR algorithm result := result + toto; end; writeln('The crypted text is:'); writeln(result); write('Should i save it to result.txt ?'); read(c); if c in ['Y','y'] then begin AssignFile(F,'result.txt'); Rewrite(F); Writeln(F,result); CloseFile(F); end; end.
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
/* Logical XOR: if both bits are 1 or 0, the result is 0 */ /* otherwise the result is 1. */ ret = 0; for (bit = 0; bit < sizeof(ret)*8; bit++) { if (x & (1 << bit) && y & (1 << bit)) continue; ret += (1 << bit); }; return ret; } /* xor */
int main (void) { cStr key, text, longkey, result; int i, len; char toto, c; FILE* TextFile;
printf("Enter the key: "); gets(key); printf("Enter the text: "); gets(text);
len = longkey[0] = '\x0'; for (i = 0; i < (strlen(text) / strlen(key)); i++) len += sprintf(longkey+len, key);
for (i = 0; i < len; i++) { toto = xor(text[i], longkey[i]); result[i] = toto; }; result[i] = '\x0';
printf("The crypted text is: \n"); printf("%s\n", result); printf("Should i save it to result.txt ? "); c = getch(); if (c == 'Y' || c == 'y') { TextFile = fopen("result.txt", "w+b"); fprintf(TextFile, result); fclose(TextFile); printf("Text saved.\n"); }; return 0; } /* main */
Se så er det jo selv algoritmen, vi taler om - og den er ikke kodet ordentligt. Ideen -som jeg kan gennemskue det- er at løbende kryptere teksten vha. den indtastede key. Det kunne man mere enkelt gøre ved at 'loope' rundt i nøglen tegn for tegn:
Jeg har også et stykke delphi/pascal kode til at dekryptere... I de to delphi-koder, bruger de to HELT ens for-loops, men det synes jeg bare ikke jeg kan få til at virke med det du har lavet? Er det logisk, eller er det bare fordi jeg er en klump til C/C++?! =)
kamikaze >> NEJ, ikke i toppen af WHILE løkken !!! Hvad er ofs inde i while loop'et første gang ? Ikke 0 (nul) vel, men derimod 1 (en) !
acid-head >> Decrypt kræver at du har den krypterede tekst og den oprindelige nøgle. Hvis den krypterede text indeholder 1 på en given bit-position, og nøglen også gør det, må den oprindelige tekst have været 0 og omvendt. Hvis den krypterede text indeholder 0, må den oprindelige text have indeholdt det samme som nøglen gør. Hvis man XOR'er den krypterede text og den oprindelige nøgle, vil man derfor komme tilbage til den oprindelige tekst.
I fht. kryptering er xor MEGET anvendt (og dermed nem at bryde), så hvis du vil sikre dig yderligere, kan du "rulle" alle tegn med et offset afh. af tegnets position i selve teksten og det foregående tegns værdi - hermed forvanskes teksten både ud fra indhold og kodeord.
Kryptering brydes oftest ved at frekvensen på de almindelige tegn i en tekst (f.eks. gennemsnitligt antal E'er i en alm. dansk tekst) er den samme i den krypterede tekst. Selvom ovenstående koder vha. kodeordet, skal det altså være meget langt, for at yde sikkerhed mod at f.eks. 'E' tildeles samme værdien flere steder i teksten. (128 bits kryptering svarer til min. 16 tegns kodeord - 512 bits, som regnes for sikkert, er altså 64 tegns kodeord !)
Synes godt om
Ny brugerNybegynder
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.