24 lines
1 KiB
Text
24 lines
1 KiB
Text
procedure main()
|
|
ptext := "Beware the Jabberwock, my son! The jaws that bite, the claws that catch!"
|
|
write("Key = ",ekey := "VIGENERECIPHER")
|
|
write("Plain Text = ",ptext)
|
|
write("Normalized = ",GFormat(ptext := NormalizeText(ptext)))
|
|
write("Enciphered = ",GFormat(ctext := Vignere("e",ekey,ptext)))
|
|
write("Deciphered = ",GFormat(ptext := Vignere("d",ekey,ctext)))
|
|
end
|
|
|
|
procedure Vignere(mode,ekey,ptext,alpha) #: Vignere cipher
|
|
/alpha := &ucase # default
|
|
if *alpha ~= *cset(alpha) then runerr(205,alpha) # no dups
|
|
alpha ||:= alpha # unobstructed
|
|
|
|
every ctext:="" & p:=ptext[i := 1 to *ptext] & k:=ekey[(i-1)%*ekey+1] do
|
|
case mode of {
|
|
"e"|"encrypt":
|
|
ctext||:=map(p,alpha[1+:*alpha/2],alpha[find(k,alpha)+:(*alpha/2)])
|
|
"d"|"decrypt":
|
|
ctext||:=map(p,alpha[find(k,alpha)+:(*alpha/2)],alpha[1+:*alpha/2])
|
|
default: runerr(205,mode)
|
|
}
|
|
return ctext
|
|
end
|