51 lines
1.6 KiB
Text
51 lines
1.6 KiB
Text
$ include "seed7_05.s7i";
|
|
|
|
const func string: vigenereCipher (in string: source, in var string: keyword) is func
|
|
result
|
|
var string: dest is "";
|
|
local
|
|
var char: ch is ' ';
|
|
var integer: index is 1;
|
|
var integer: shift is 0;
|
|
begin
|
|
keyword := upper(keyword);
|
|
for ch range source do
|
|
if ch in {'A' .. 'Z'} | {'a' .. 'z'} then
|
|
shift := ord(keyword[succ(pred(index) rem length(keyword))]) - ord('A');
|
|
dest &:= chr(ord('A') + (ord(upper(ch)) - ord('A') + shift) rem 26);
|
|
incr(index);
|
|
end if;
|
|
end for;
|
|
end func;
|
|
|
|
const func string: vigenereDecipher (in string: source, in var string: keyword) is func
|
|
result
|
|
var string: dest is "";
|
|
local
|
|
var char: ch is ' ';
|
|
var integer: index is 0;
|
|
var integer: shift is 0;
|
|
begin
|
|
keyword := upper(keyword);
|
|
for ch key index range source do
|
|
if ch in {'A' .. 'Z'} | {'a' .. 'z'} then
|
|
shift := ord(keyword[succ(pred(index) rem length(keyword))]) - ord('A');
|
|
dest &:= chr(ord('A') + (ord(upper(ch)) - ord('A') - shift) mod 26);
|
|
end if;
|
|
end for;
|
|
end func;
|
|
|
|
const proc: main is func
|
|
local
|
|
const string: input is "Beware the Jabberwock, my son! The jaws that bite, the claws that catch!";
|
|
const string: keyword is "VIGENERECIPHER";
|
|
var string: encrypted is "";
|
|
var string: decrypted is "";
|
|
begin
|
|
writeln("Input: " <& input);
|
|
writeln("key: " <& keyword);
|
|
encrypted := vigenereCipher(input, keyword);
|
|
writeln("Encrypted: " <& encrypted);
|
|
decrypted := vigenereDecipher(encrypted, keyword);
|
|
writeln("Decrypted: " <& decrypted);
|
|
end func;
|