Wednesday, 15 August 2018

Implement Monoalphabetic cipher encryption-decryption in c.


Introduction
Better than Caesar Cipher.
If, instead the “cipher” line can be any permutation of the key 26 alphabetic characters, then there are 26! Or greater than 4 * 1026 possible keys. This is 10 orders of magnitude greater than the key space for DES and would seem to as a Mono-alphabetic substitution cipher, because a single cipher alphabet is used per message.
There is however, another line of attack. If one analytically knows the nature of the plain text, then the analyst can exploit the regularities of the language.
Example
For each character of alphabet, assign different-abrupt concerned character.


a
b
c
d
e
f
g
h
i
j
k
l
m
Z
Y
X
W
V
U
T
S
R
Q
P
O
N

n
o
p
q
r
s
t
u
v
w
x
y
Z
M
L
K
J
I
H
G
F
E
D
C
B
A
 

Plain text: goodmorning
Cipher text: TLLWNLIMRMT


                                             Limitations
Monoalphabetic ciphers are easy to break because they reflect the frequency data of the original alphabet.
A countermeasure is to provide multiple substitutes, known as homophones, for a single letter.
 


C code:
//MONOALPHABATIC CIPHER
#include<stdio.h>
#include<conio.h>
#include<string.h>
void main()
{
            char pt[26]={'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
            char ct[26]={'Z','Y','X','W','V','U','T','S','R','Q','P','O','N','M','L','K','J','I','H','G','F','E','D','C','B','A'};
            char p[20]={'\0'},c[20]={'\0'},r[20]={'\0'};
            int i,j;
            clrscr();
            printf("\n enter the plain text:");
            gets(p);
            //converting plain text into cipher text (encryption)
            for(i=0;i<strlen(p);i++)
            {
                        for(j=0;j<26;j++)
                        {
                        if(pt[j]==p[i])
                        {
                                    c[i]=ct[j];
                        }
                        }
            }
            printf("\n cipher text is: %s",c);

            //converting cipher text into plain text (decryption)
            for(i=0;i<strlen(c);i++)
            {
                        for(j=0;j<26;j++)
                        {
                        if(ct[j]==c[i])
                        {
                                    r[i]=pt[j];
                        }
                        }
            }
            printf("\n \n plain text is: %s",r);
            getch();
}
Output:
 

THANK YOU!!!!

8 comments: