Autor |
Beitrag |
F34r0fTh3D4rk
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Sa 05.11.05 21:20
Hallo, ich habe gerade was von Vignere gelesen und wollte mal nen algo dazu schreiben:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56:
| function Vignere(Text, Key: string): string; const vignere_quad: array [1..26] of string = ( 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'BCDEFGHIJKLMNOPQRSTUVWXYZA', 'CDEFGHIJKLMNOPQRSTUVWXYZAB', 'DEFGHIJKLMNOPQRSTUVWXYZABC', 'EFGHIJKLMNOPQRSTUVWXYZABCD', 'FGHIJKLMNOPQRSTUVWXYZABCDE', 'GHIJKLMNOPQRSTUVWXYZABCDEF', 'HIJKLMNOPQRSTUVWXYZABCDEFG', 'IJKLMNOPQRSTUVWXYZABCDEFGH', 'JKLMNOPQRSTUVWXYZABCDEFGHI', 'KLMNOPQRSTUVWXYZABCDEFGHIJ', 'LMNOPQRSTUVWXYZABCDEFGHIJK', 'MNOPQRSTUVWXYZABCDEFGHIJKL', 'NOPQRSTUVWXYZABCDEFGHIJKLM', 'OPQRSTUVWXYZABCDEFGHIJKLMN', 'PQRSTUVWXYZABCDEFGHIJKLMNO', 'QRSTUVWXYZABCDEFGHIJKLMNOP', 'RSTUVWXYZABCDEFGHIJKLMNOPQ', 'STUVWXYZABCDEFGHIJKLMNOPQR', 'TUVWXYZABCDEFGHIJKLMNOPQRS', 'UVWXYZABCDEFGHIJKLMNOPQRST', 'VWXYZABCDEFGHIJKLMNOPQRSTU', 'WXYZABCDEFGHIJKLMNOPQRSTUV', 'XYZABCDEFGHIJKLMNOPQRSTUVW', 'YZABCDEFGHIJKLMNOPQRSTUVWX', 'ZABCDEFGHIJKLMNOPQRSTUVWXY' ); var i, j, count: integer; ukey: string; chx, chy: char; begin result := ''; count := 0; ukey := key; if length(key) < length(Text) then for i := 1 to length(Text) do begin inc(count); if count > length(key) then count := 1; ukey := ukey + key[count]; end; if length(key) > length(Text) then ukey := copy(key, 1, length(Text)); for j := 1 to length(Text) do begin chx := upcase(Text[j]); chy := upcase(ukey[j]); result := result + vignere_quad[ord(chx) div 65][ord(chy) div 65]; end; end; |
als ergebnis kommt jedoch immer A heraus, woran kann das liegen ?
|
|
_Digger
      
Beiträge: 46
Win XP
Delphi5 Prof
|
Verfasst: Sa 05.11.05 23:04
hallo
Delphi-Quelltext 1:
| result := result + vignere_quad[ord(chx) - 64][ord(chy) - 64]; |
du hast hier durch 65 dividiert. das ergibt aber keinen Sinn, weil wenn du den Buchstaben B hast, kommt bei dir 66/65=1.01538 heraus, aber ich denke einmal, dass du eigentlich 2 als ergebnis haben willst.
so gehts denke ich kürzer (ich habe es aber noch nicht ausprobiert!)
Delphi-Quelltext 1: 2: 3: 4: 5:
| var z :integer;
z:=ord(chx)+ord(chy); if z>90 then z:=z-26; result:=result+char(z); |
dann kannst du dir das vignere_quad sparen (aber wenn du das schon einmal getippt hast, dann kannst du deine Variante genauso gut verwenden)
|
|
F34r0fTh3D4rk 
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: So 06.11.05 11:44
ja ich wollte das nur gerne übersichtlich haben, damit ersichtlich ist wie das funktioniert, das quad wollte ich später eh rausnehmen
ich muss glaube ich subtahieren und net dividieren
so scheint des zu stimmen: 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56:
| function Vignere(Text, Key: string): string; const vignere_quad: array [1..26] of string = ( 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'BCDEFGHIJKLMNOPQRSTUVWXYZA', 'CDEFGHIJKLMNOPQRSTUVWXYZAB', 'DEFGHIJKLMNOPQRSTUVWXYZABC', 'EFGHIJKLMNOPQRSTUVWXYZABCD', 'FGHIJKLMNOPQRSTUVWXYZABCDE', 'GHIJKLMNOPQRSTUVWXYZABCDEF', 'HIJKLMNOPQRSTUVWXYZABCDEFG', 'IJKLMNOPQRSTUVWXYZABCDEFGH', 'JKLMNOPQRSTUVWXYZABCDEFGHI', 'KLMNOPQRSTUVWXYZABCDEFGHIJ', 'LMNOPQRSTUVWXYZABCDEFGHIJK', 'MNOPQRSTUVWXYZABCDEFGHIJKL', 'NOPQRSTUVWXYZABCDEFGHIJKLM', 'OPQRSTUVWXYZABCDEFGHIJKLMN', 'PQRSTUVWXYZABCDEFGHIJKLMNO', 'QRSTUVWXYZABCDEFGHIJKLMNOP', 'RSTUVWXYZABCDEFGHIJKLMNOPQ', 'STUVWXYZABCDEFGHIJKLMNOPQR', 'TUVWXYZABCDEFGHIJKLMNOPQRS', 'UVWXYZABCDEFGHIJKLMNOPQRST', 'VWXYZABCDEFGHIJKLMNOPQRSTU', 'WXYZABCDEFGHIJKLMNOPQRSTUV', 'XYZABCDEFGHIJKLMNOPQRSTUVW', 'YZABCDEFGHIJKLMNOPQRSTUVWX', 'ZABCDEFGHIJKLMNOPQRSTUVWXY' ); var i, j, count: integer; ukey: string; chx, chy: char; begin result := ''; count := 0; ukey := key; if length(key) < length(Text) then for i := 1 to length(Text) do begin inc(count); if count > length(key) then count := 1; ukey := ukey + key[count]; end; if length(key) > length(Text) then ukey := copy(key, 1, length(Text)); for j := 1 to length(Text) do begin chx := upcase(Text[j]); chy := upcase(ukey[j]); result := result + vignere_quad[ord(chx) - 64][ord(chy) - 64]; end; end; |
danke 
|
|
|