In: Computer Science
def
decryptRailFence(cipher, key):
# create the matrix
to cipher
# plain text key =
rows ,
# length(text) =
columns
# filling the rail
matrix to
# distinguish filled
spaces
# from blank
ones
rail
=
[[
'\n'
for
i
in
range
(
len
(cipher))]
for
j
in
range
(key)]
# to find the
direction
dir_down
=
None
row, col
=
0
,
0
# mark the places
with '*'
for
i
in
range
(
len
(cipher)):
if
row
=
=
0
:
dir_down
=
True
if
row
=
=
key
-
1
:
dir_down
=
False
#
place the marker
rail[row][col]
=
'*'
col
+
=
1
#
find the next row
#
using direction flag
if
dir_down:
row
+
=
1
else
:
row
-
=
1
# now we can
construct the
# fill the rail
matrix
index
=
0
for
i
in
range
(key):
for
j
in
range
(
len
(cipher)):
if
((rail[i][j]
=
=
'*'
)
and
(index
<
len
(cipher))):
rail[i][j]
=
cipher[index]
index
+
=
1
# now read the matrix
in
# zig-zag manner to
construct
# the resultant
text
result
=
[]
row, col
=
0
,
0
for
i
in
range
(
len
(cipher)):
#
check the direction of flow
if
row
=
=
0
:
dir_down
=
True
if
row
=
=
key
-
1
:
dir_down
=
False
#
place the marker
if
(rail[row][col] !
=
'*'
):
result.append(rail[row][col])
col
+
=
1
#
find the next row using
#
direction flag
if
dir_down:
row
+
=
1
else
:
row
-
=
1
return
("".join(result))
# Driver code
if
__name__
=
=
"__main__"
:
print
(encryptRailFence(
"attack
at once"
,
2
))
print
(encryptRailFence(
"GeeksforGeeks
"
,
3
))
print
(encryptRailFence(
"defend
the east wall"
,
3
))
# Now decryption of
the
# same
cipher-text
print
(decryptRailFence(
"GsGsekfrek
eoe"
,
3
))
print
(decryptRailFence(
"atc
toctaka ne"
,
2
))
print
(decryptRailFence(
"dnhaweedtees
alf tl"
,
3
))