# Rail Fence Cipher Program in C and C++[Encryption & Decryption]

Here you will get rail fence cipher program in C and C++ for encryption and decryption.

It is a kind of transposition cipher which is also known as zigzag cipher. Below is an example.

Here Key = 3. For encryption we write the message diagonally in zigzag form in a matrix having total rows = key and total columns = message length. Then read the matrix row wise horizontally to get encrypted message.

## Rail Fence Cipher Program in C

```#include<stdio.h>
#include<string.h>

void encryptMsg(char msg[], int key){
int msgLen = strlen(msg), i, j, k = -1, row = 0, col = 0;
char railMatrix[key][msgLen];

for(i = 0; i < key; ++i)
for(j = 0; j < msgLen; ++j)
railMatrix[i][j] = '\n';

for(i = 0; i < msgLen; ++i){
railMatrix[row][col++] = msg[i];

if(row == 0 || row == key-1)
k= k * (-1);

row = row + k;
}

printf("\nEncrypted Message: ");

for(i = 0; i < key; ++i)
for(j = 0; j < msgLen; ++j)
if(railMatrix[i][j] != '\n')
printf("%c", railMatrix[i][j]);
}

void decryptMsg(char enMsg[], int key){
int msgLen = strlen(enMsg), i, j, k = -1, row = 0, col = 0, m = 0;
char railMatrix[key][msgLen];

for(i = 0; i < key; ++i)
for(j = 0; j < msgLen; ++j)
railMatrix[i][j] = '\n';

for(i = 0; i < msgLen; ++i){
railMatrix[row][col++] = '*';

if(row == 0 || row == key-1)
k= k * (-1);

row = row + k;
}

for(i = 0; i < key; ++i)
for(j = 0; j < msgLen; ++j)
if(railMatrix[i][j] == '*')
railMatrix[i][j] = enMsg[m++];

row = col = 0;
k = -1;

printf("\nDecrypted Message: ");

for(i = 0; i < msgLen; ++i){
printf("%c", railMatrix[row][col++]);

if(row == 0 || row == key-1)
k= k * (-1);

row = row + k;
}
}

int main(){
char msg[] = "Hello World";
char enMsg[] = "Horel ollWd";
int key = 3;

printf("Original Message: %s", msg);

encryptMsg(msg, key);
decryptMsg(enMsg, key);

return 0;
}```

Output

Original Message: Hello World
Encrypted Message: Horel ollWd
Decrypted Message: Hello World

## Rail Fence Cipher Program in C++

```#include<iostream>
#include<string.h>

using namespace std;

void encryptMsg(char msg[], int key){
int msgLen = strlen(msg), i, j, k = -1, row = 0, col = 0;
char railMatrix[key][msgLen];

for(i = 0; i < key; ++i)
for(j = 0; j < msgLen; ++j)
railMatrix[i][j] = '\n';

for(i = 0; i < msgLen; ++i){
railMatrix[row][col++] = msg[i];

if(row == 0 || row == key-1)
k= k * (-1);

row = row + k;
}

cout<<"\nEncrypted Message: ";

for(i = 0; i < key; ++i)
for(j = 0; j < msgLen; ++j)
if(railMatrix[i][j] != '\n')
cout<<railMatrix[i][j];
}

void decryptMsg(char enMsg[], int key){
int msgLen = strlen(enMsg), i, j, k = -1, row = 0, col = 0, m = 0;
char railMatrix[key][msgLen];

for(i = 0; i < key; ++i)
for(j = 0; j < msgLen; ++j)
railMatrix[i][j] = '\n';

for(i = 0; i < msgLen; ++i){
railMatrix[row][col++] = '*';

if(row == 0 || row == key-1)
k= k * (-1);

row = row + k;
}

for(i = 0; i < key; ++i)
for(j = 0; j < msgLen; ++j)
if(railMatrix[i][j] == '*')
railMatrix[i][j] = enMsg[m++];

row = col = 0;
k = -1;

cout<<"\nDecrypted Message: ";

for(i = 0; i < msgLen; ++i){
cout<<railMatrix[row][col++];

if(row == 0 || row == key-1)
k= k * (-1);

row = row + k;
}
}

int main(){
char msg[] = "Hello World";
char enMsg[] = "Horel ollWd";
int key = 3;

cout<<"Original Message: "<<msg;

encryptMsg(msg, key);
decryptMsg(enMsg, key);

return 0;
}```

Comment below if you have queries related to above rail fence cipher program in C and C++.

### 2 thoughts on “Rail Fence Cipher Program in C and C++[Encryption & Decryption]”

1. You are done it only for specific input-“Hello World”..but I have to perform encryption and decryption on whatever the user gives as input..please share the program to do the same as soon as possible..thanks in advance!!