Avatar billede hmm_0 Nybegynder
01. november 2005 - 19:34 Der 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.

Håber nogen kan hjælpe

Venlig hilsen
Avatar billede arne_v Ekspert
01. november 2005 - 19:39 #1
jeg lavede engang det her stykke kode:

program Crypt;

{$APPTYPE CONSOLE}

uses
  SysUtils;

function encrypt(tekst,kode:string):string;

var
  I: integer;

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.
Avatar billede hmm_0 Nybegynder
01. november 2005 - 20:04 #2
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?
Avatar billede arne_v Ekspert
01. november 2005 - 20:07 #3
32 skal erstattes af 65

96 skal erstattes af 26
Avatar billede hmm_0 Nybegynder
01. november 2005 - 20:19 #4
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?
Avatar billede arne_v Ekspert
01. november 2005 - 20:49 #5
erstat

I mod length(kode)

med

(I-1) mod length(kode)
Avatar billede hmm_0 Nybegynder
01. november 2005 - 20:53 #6
virker nu..mange tak, smid et svar så får du point
Avatar billede arne_v Ekspert
01. november 2005 - 20:54 #7
kommer her
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

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