05. september 2002 - 11:22Der er
11 kommentarer og 1 løsning
Kryptering af string
Hejsa
Jeg leder efter en smaet lille måde at kryptere en string, der kan implementeres i både Delphi og C++, dvs, det skal ikke være en 3parts komponent. Jeg vil imidlertid gerne have kode i Delphi.
Hvor sikker skal din kryptering være? Man kan næsten opdele det i katagorier.
Du kan bruge almindelig randseed kryptering, den er ikke nødvendigvis let at bryde men det er muligt og det er reletivt let at gøre.
Du kan også definere en nøgle som du så pr. telefon eller mund til mund formidler. hvis nøglen ikke er logisk opbygget og lige så lang eller længrer end strengen vil det ikke være muligt at bryde den. Det kræver bare at personen kender den.
Der er også mange andre muligheder hvor man ikke ønsker at brugeren behøver at kende nøglen men evt. et kodeord. De kræver at man med matematik prøver at lave en nøgle som ikke er alt for logisk opbygget. De vil ALTID være mulige at knække men det er stadig svært om ikke umuligt for en almindelig eller erfaren bruger at bryde. Det vil under alle omstændigheder kræve en masse erfaring og viden om kryptering og ikke mindst cpu-kraft.
Prøv det her, det er en randseed cryptering. Du bestemmer selv Rs det der en form for nøgle.... eller ikke.... nå, den skal bare være den samme når du kryptere og dekryptere. st er henholdsvis den krypterede streng og den streng der skal krypteres.
eks. var tmp : string; begin st := 'test'; tmp := CtyptDecrypt(st,12345); memo1.lines.add('krypteret: '+tmp); memo1.lines.add('Dekrypteret: '+CtyptDecrypt(tmp,12345)); end;
function CtyptDecrypt(st : string; RS : integer) : string var i : integer; tmp : string; begin randseed := RS; SetLength(tmp,Length(St)); for i := 1 to length(st) do tmp[i] := chr(ord(st[i]) xor random(256)); result := tmp; end;
var tmp : string; begin st := 'test'; tmp := CtyptDecrypt(st,'Nogle tilfældige tal eller bukstaver');// jo mere tilfældige jo bedrer!!! memo1.lines.add('krypteret: '+tmp); memo1.lines.add('Dekrypteret: '+CtyptDecrypt(tmp,'Nogle tilfældige tal eller bukstaver')); end;
function CtyptDecrypt(st : string; noegle : string) : string var i,a : integer; tmp : string; begin SetLength(tmp,Length(st)); a := 0; i := 0; repeat inc(a); if a > Length(noegle) then a := 1; inc(i); tmp[i] := chr(ord(st[i]) xor ord(noegle[a])); until i >= Length(st); result := tmp; end;
i det sidste eks. hvis din nøgle er 100% tilfældig, den er længere eller lige så lang som strengen og du kun kryptere en streng så vil den være umulig at bryde da den krypterede streng ville kunne blive til hvad som helst. Du skal selvfølgelig også tænke på at der ikke nå være andre end dig og modtager der har nøglen.
loke-liscom: Set i bakspejlet skulle du egentlig ikke have pointene :).
Hvis vi tager dit eksempel: 1) Du giver inputstring, du kender ikke keystring du får outputstring 2) Du giver outputstringen, du kender ikke keystringen, men du får keystringen 3) Du har nu keystringen og kan dekryptere alle andre outputstrings. Det forudsætter, at du ved, at det er en xor der benyttes.
Ja, det kan du have ret i. Det er heller ikke loke-liscom jeg kritiserer, det er min egen evne til at gennemskue, at det var forkert, det der blev skrevet.
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.