01. november 2005 - 19:34Der er
6 kommentarer og 1 løsning
polyalfabetisk kryptering
Hej. Jeg har et problem med et nyt program, som jeg vil skrive i delphi 3. Programmet skal konvertere en streng med en nøgle. Programmet skal være baseret på polyalfabetisk substitution. Jeg giver hvert bogstav i alfabetet en værdi (f.eks. A=0, B=1 osv, optil Z=25). Hvis man vil kryptere SKINKE med nøglen POLYAL sker det således;
klartekst og talværdier; S K I N K E 18 10 8 13 10 4
nøgle; P O L Y A L 15 14 11 24 0 11
krypteret; H Y T L K P 7 24 19 11 10 15
Jeg havde forestillet mig noget lignende værdien(tegn[i] af klarteksten) + værdien(tegn[i] af nøglen) = ny talværdi. --> skal konverteres til tegn.
Problemet er at jeg ikke rigtig kan få det realiseret i delphi.
begin for I := 1 to length(tekst) do begin tekst[I] := chr(32+((ord(tekst[I])-32)+(ord(kode[(I mod length(kode))+1])-32)) mod 96); end; result := tekst; end;
function decrypt(tekst,kode:string):string;
var I: integer;
begin for I := 1 to length(tekst) do begin tekst[I] := chr(32+(96 + (ord(tekst[I])-32)-(ord(kode[(I mod length(kode))+1])-32)) mod 96); end; result := tekst; end;
var t : string;
begin t := 'Dette er en proeve'; writeln(t); writeln(encrypt(t, 'hemmeligt')); writeln(decrypt(t, 'hemmeligt')); writeln(decrypt(encrypt(t, 'hemmeligt'), 'hemmeligt')); writeln(encrypt(decrypt(t, 'hemmeligt'), 'hemmeligt')); end.
det virker..men ikke helt som jeg havde forestillet mig. kan du forklare hvad denne sætning præcist gør? tekst[I] := chr(32+((ord(tekst[I])-32)+(ord(kode[(I mod length(kode))+1])-32)) mod 96); jeg skal kun arbejde med store bogstaver (altså ASCII-værdier fra 65 til 90). Hvordan skriver jeg ovenstående linje om så det bliver opfyldt?
den skriver 'GVGNVT' med nøglen POLYAL med klarteksten SKINKE, og det passer ikke med det man kan regne sig frem til. Hvorfor er der f.eks to G'er og to V'er?
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.