RosettaCodeData/Task/Bifid-cipher/EasyLang/bifid-cipher.easy
2025-06-11 20:16:52 -04:00

62 lines
1.2 KiB
Text

proc prepare &s$ .
for e$ in strchars s$
h = strcode e$
if h >= 97
h -= 32
.
if h >= 65 and h <= 91
if h = 74
h = 73
.
r$ &= strchar h
.
.
swap s$ r$
.
func$ encr msg$ key$ .
prepare msg$
len h[] len msg$ * 2
for i to len msg$
c$ = substr msg$ i 1
j = strpos key$ c$ - 1
h[i] = j div 5
h[len msg$ + i] = j mod 5
.
for i = 1 step 2 to len h[] - 1
j = h[i] * 5 + h[i + 1] + 1
r$ &= substr key$ j 1
.
return r$
.
func$ decr msg$ key$ .
for i to len msg$
c$ = substr msg$ i 1
j = strpos key$ c$ - 1
h[] &= j div 5
h[] &= j mod 5
.
mid = len h[] div 2
for i = 1 to mid
j = h[i] * 5 + h[i + mid] + 1
r$ &= substr key$ j 1
.
return r$
.
key$ = "ABCDEFGHIKLMNOPQRSTUVWXYZ"
h$ = encr "ATTACKATDAWN" key$
print h$
print decr h$ key$
print ""
#
key$ = "BGWKZQPNDSIOAXEFCLUMTHYVR"
h$ = encr "FLEEATONCE" key$
print h$
print decr h$ key$
print ""
h$ = encr "ATTACKATDAWN" key$
print h$
print decr h$ key$
print ""
h$ = encr "The invasion will start on the first of January" key$
print h$
print decr h$ key$