Rail Fence Cipher

Downward Arrow

Introduction

The rail fence cipher is a form of transposition cipher. Rail fence cipher is also called as Zig-Zag cipher. It derives its name from the way in which it is encoded.

Example:

                        Encryption
                        Input : "attack at once"
                        Key = 2 
                        Output : atc toctaka ne 
                        Decryption
                        Input : "atc toctaka ne"
                        Key = 2
                        Output : attack at once
                    

Encryption

In a transposition cipher, the order of the alphabets is re-arranged to obtain the cipher-text.

  • In the rail fence cipher, the plain-text is written downwards and diagonally on successive rails of an imaginary fence.
  • When we reach the bottom rail, we traverse upwards moving diagonally, after reaching the top rail, the direction is changed again. Thus the alphabets of the message are written in a zig-zag manner.
  • After each alphabet has been written, the individual rows are combined to obtain the cipher-text.

For example, if the message is “GeeksforGeeks” and the number of rails = 3 then cipher is prepared as:

Decryption

As we’ve seen earlier, the number of columns in rail fence cipher remains equal to the length of plain-text message. And the key corresponds to the number of rails.

  • Hence, rail matrix can be constructed accordingly. Once we’ve got the matrix we can figure-out the spots where texts should be placed (using the same way of moving diagonally up and down alternatively ).
  • Then, we fill the cipher-text row wise. After filling it, we traverse the matrix in zig-zag manner to obtain the original text.
                        Implementation: 
                        Let cipher-text = “GsGsekfrek eoe” , and Key = 3
                    
  • Number of columns in matrix = len(cipher-text) = 13
  • Number of rows = key = 3

Hence original matrix will be of 3*13 , now marking places with text as ‘*’ we get

                        * _ _ _ * _ _ _ * _ _ _ *
                        _ * _ * _ * _ * _ * _ * 
                        _ _ * _ _ _ *  _ _ _ * _ 
                    

Implementation


Plaintext:

Key:

Ciphered Text:


Ciphered Text:

Key:

Plain Text: