Sie sind auf Seite 1von 17

DES

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
int main()
{
char hex_msg[16];
int bin_msg[64];
printf("Enter the hex message\n");
for(int i=0;i<16;i++)
{
scanf(" %c",&hex_msg[i]);
}
printf("Message in binary is :\n");
for(int i=0;i<64;i++)
bin_msg[i]=0;
for(int i=0;i<16;i++)
{
int deci ;
if(hex_msg[i] <=57 && hex_msg[i] >=48)
deci=hex_msg[i]-48;
else
{
if(hex_msg[i] >=65 && hex_msg[i]<=90)
deci=hex_msg[i]-55;
else
deci=hex_msg[i]-87;
}
int index=4*i+3;
while(deci > 0)
{
bin_msg[index]= deci%2;
deci=deci/2;
index--;
}
}
for(int i=0;i<64;i++)
printf("%d ",bin_msg[i]);
char hex_key[16];

printf("\nEnter the hex key\n");


for(int i=0;i<16;i++)
{
scanf(" %c",&hex_key[i]);
}
int bin_key[64];
for(int i=0;i<64;i++)
bin_key[i]=0;
for(int i=0;i<16;i++)
{
int deci ;
if(hex_key[i] <=57 && hex_key[i] >=48)
deci=hex_key[i]-48;
else
{
if(hex_key[i] >=65 && hex_key[i]<=90)
deci=hex_key[i]-55;
else
deci=hex_key[i]-87;
}
int index=4*i+3;
while(deci > 0)
{
bin_key[index]= deci%2;
deci=deci/2;
index--;
}
}
printf("The binary key is \n");
for(int i=0;i<64;i++)
printf("%d ",bin_key[i]);
int PC1[7][8];
bool flag[64];
int pos[64];
for(int i=0;i<64;i++)
{
flag[i]=false;
pos[i]=i;
}
for(int i=0;i<7;i++)
{
for(int j=0;j<8;j++)
{
int index=-1;
while(true)

{
index=rand()%64;
if(flag[index] == false)
break;
}
flag[index]=true;
PC1[i][j] = index;
}

}
printf("\nPC1:\n");
for(int i=0;i<7;i++)
{
for(int j=0;j<8;j++)
{
printf("%d ",PC1[i][j]);
}
printf("\n");
}
int K1[7][8];
for(int i=0;i<7;i++)
{
for(int j=0;j<8;j++)
{
K1[i][j] = bin_key[PC1[i][j]];
}

}
printf("K1 is \n");
for(int i=0;i<7;i++)
{
for(int j=0;j<8;j++)
{
printf("%d ",K1[i][j]);
}
printf("\n");
}
int C1[28],D1[28];
for(int i=0;i<3;i++)
{
for(int j=0;j<8;j++)
{
C1[8*i+j] = K1[i][j];

}
for(int i=0;i<4;i++)
C1[24+i] = K1[3][i];
for(int i=4;i<8;i++)
D1[i-4] = K1[3][i];
for(int i=4;i<7;i++)
{
for(int j=0;j<8;j++)
{
D1[4+8*(i-4)+j]=K1[i][j];
}
}
int L0[28];
int R0[28];
for(int i=0;i<28;i++)
{
L0[i]=C1[i];
R0[i]=D1[i];
}
printf("C1 is :\n");
for(int i=0;i<28;i++)
printf("%d ",C1[i]);
printf("\n\n\n");
printf("D1 is :\n");
for(int i=0;i<28;i++)
printf("%d ",D1[i]);
printf("\n\n\n");
//Rotate D1 // Rotate C1
int first_C=C1[0];
int first_D=D1[0];
for(int i=1;i<28;i++)
{
C1[i-1]=C1[i];
D1[i-1]=D1[i];
}
C1[27]=first_C;
D1[27]=first_D;
printf("Left Shifted C1\n");
for(int i=0;i<28;i++)
printf("%d ",C1[i]);
printf("\n\n\n");
printf("Left Shifted D1\n");

for(int i=0;i<28;i++)
printf("%d ",D1[i]);
int PC2[6][8];
bool c1_flag[56];
int c1_ind[56];
for(int i=0;i<56;i++)
{
c1_flag[i]=false;
c1_ind[i]=i;
}
for(int i=0;i<6;i++)
{
for(int j=0;j<8;j++)
{
int index=-1;
while(true)
{
index= rand()%56;
if(c1_flag[index] == false)
break;
}
PC2[i][j] = index;
c1_flag[index]=true;
}
}
printf("\n\n PC2 is \n\n ");
for(int i=0;i<6;i++)
{
for(int j=0;j<8;j++)
{
printf("%d ",PC2[i][j]);
}
printf("\n");
}
int KR1[6][8];
for(int i=0;i<6;i++)
{
for(int j=0;j<8;j++)
{
if(PC2[i][j] >=28)
KR1[i][j] = D1[PC2[i][j]-28];
else
KR1[i][j] = C1[PC2[i][j]];
}

}
printf("\n\n Key Round 1 is \n\n ");
for(int i=0;i<6;i++)
{
for(int j=0;j<8;j++)
{
printf("%d ",KR1[i][j]);
}
printf("\n");
}
bool IP_flag[64];
bool IP_arr[64];
int IP[8][8];
for(int i=0;i<64;i++)
{
IP_flag[i]=false;
IP_arr[i] = i;
}
for(int i=0;i<8;i++)
{
for(int j=0;j<8;j++)
{
int index=-1;
while(true)
{
index =rand()%64;
if(IP_flag[index] == false)
break;
}
IP_flag[index]=true;
IP[i][j]=index;
}
}
printf("\n\n IP is \n\n ");
for(int i=0;i<8;i++)
{
for(int j=0;j<8;j++)
{
printf("%d ",IP[i][j]);
}
printf("\n");
}
int M_IP[8][8]; // Message after aopplying IP

for(int i=0;i<8;i++)
{
for(int j=0;j<8;j++)
{
M_IP[i][j] = bin_msg[IP[i][j]];
}
}
printf("\n\n Message after Applying IP is \n\n ");
for(int i=0;i<8;i++)
{
for(int j=0;j<8;j++)
{
printf("%d ",M_IP[i][j]);
}
printf("\n");
}

int L_MSG[32];
int R_MSG[32];
for(int i=0;i<4;i++)
{
for(int j=0;j<8;j++)
{
R_MSG[8*i+j] = M_IP[i][j];
}
}
for(int i=4;i<8;i++)
{
for(int j=0;j<8;j++)
{
L_MSG[8*(i-4)+j] = M_IP[i][j];
}
}
printf("\n\n Left Message is \n\n ");
for(int i=0;i<32;i++)
{
printf("%d ",L_MSG[i]);
}
printf("\n");
int E_box[6][8];
for(int i=0;i<6;i++)
{
for(int j=0;j<8;j++)
{
E_box[i][j] = rand()%32;
}

}
printf("\n\n E Box is \n\n ");
for(int i=0;i<6;i++)
{
for(int j=0;j<8;j++)
{
printf("%d ",E_box[i][j]) ;
}
printf("\n");
}
int ER0[6][8];
for(int i=0;i<6;i++)
{
for(int j=0;j<8;j++)
{
ER0[i][j] = L_MSG[E_box[i][j]];
}
}
int FKR[6][8];
for(int i=0;i<6;i++)
{
for(int j=0;j<8;j++)
{
FKR[i][j] = ER0[i][j]^KR1[i][j];
}
}
printf("\n\n Fiestel Function of KR1 and ERO\n\n ");
for(int i=0;i<6;i++)
{
for(int j=0;j<8;j++)
{
printf("%d ",FKR[i][j]) ;
}
printf("\n");
}
for(int i=0;i<6;i++)
{
for(int j =0;j<8;j++)
{
R_MSG[i*8+j] = R_MSG[i*8+j]^FKR[i][j];
}
}
// S BOXes
int S1[4][16],S2[4][16],S3[4][16],S4[4][16],S5[4][16],S6[4][16],S7[4][16],S8[4][16];

for(int i=0;i<4;i++)
{
for(int j=0;j<15;j++)
S1[i][j]= rand()%16;
}
for(int i=0;i<4;i++)
{
for(int j=0;j<15;j++)
S2[i][j]= rand()%16;
}
for(int i=0;i<4;i++)
{
for(int j=0;j<15;j++)
S3[i][j]= rand()%16;
}
for(int i=0;i<4;i++)
{
for(int j=0;j<15;j++)
S4[i][j]= rand()%16;
}
for(int i=0;i<4;i++)
{
for(int j=0;j<15;j++)
S5[i][j]= rand()%16;
}
for(int i=0;i<4;i++)
{
for(int j=0;j<15;j++)
S6[i][j]= rand()%16;
}
for(int i=0;i<4;i++)
{
for(int j=0;j<15;j++)
S7[i][j]= rand()%16;
}
for(int i=0;i<4;i++)
{
for(int j=0;j<15;j++)
S8[i][j]= rand()%16;
}
int M_SBOX[32];
for(int i=0;i<32;i++)
M_SBOX[i]=0;
for(int i=0;i<8;i++)
{
int row_index = R_MSG[6*i]*2+R_MSG[(6*i)+5]*1;
int col_index = R_MSG[6*i+1]*8+R_MSG[6*i+2]*4+R_MSG[6*i+3]*2+R_MSG[6*i+4]*1;
if(i == 0)

{
int deci = S1[row_index][col_index];
int index=4*i+3;
while(deci>0)
{
M_SBOX[index] = deci%2;
deci=deci/2;
index--;
}
}
if(i == 1)
{
int deci = S2[row_index][col_index];
int index=4*i+3;
while(deci>0)
{
M_SBOX[index] = deci%2;
deci=deci/2;
index--;
}
}
if(i == 2)
{
int deci = S3[row_index][col_index];
int index=4*i+3;
while(deci>0)
{
M_SBOX[index] = deci%2;
deci=deci/2;
index--;
}
}
if(i == 3)
{
int deci = S4[row_index][col_index];
int index=4*i+3;
while(deci>0)
{
M_SBOX[index] = deci%2;
deci=deci/2;
index--;
}
}
if(i == 4)
{
int deci = S5[row_index][col_index];
int index=4*i+3;
while(deci>0)

{
M_SBOX[index] = deci%2;
deci=deci/2;
index--;
}
}
if(i == 5)
{
int deci = S6[row_index][col_index];
int index=4*i+3;
while(deci>0)
{
M_SBOX[index] = deci%2;
deci=deci/2;
index--;
}
}
if(i == 6)
{
int deci = S7[row_index][col_index];
int index=4*i+3;
while(deci>0)
{
M_SBOX[index] = deci%2;
deci=deci/2;
index--;
}
}
if(i == 7)
{
int deci = S8[row_index][col_index];
int index=4*i+3;
while(deci>0)
{
M_SBOX[index] = deci%2;
deci=deci/2;
index--;
}
}

}
printf("\n\n RMSG after SBOx\n\n ");

for(int i=0;i<32;i++)
{
printf("%d ",M_SBOX[i]);

}
printf("\n");
int P[]={15 , 6 , 19 , 20,
28 , 11 , 27, 16,
0, 14, 22 , 25,
4 ,17 , 30, 9,1 , 7 ,23 , 13,
31 , 26 , 2 , 8,
18 ,12 ,29 ,5,
21 ,10 , 3, 24};
int R_P[32];
for(int i=0;i<32;i++)
{
R_P[i] = M_SBOX[P[i]];
}
printf("\n\n RMSG after P\n\n ");
for(int i=0;i<32;i++)
{
printf("%d ",R_P[i]);

printf("\n");
getch();

RSA

#include<stdio.h>

#include<conio.h>
int gcd(int a,int b)
{
if(b == 0)
return a;
else
return gcd(b,a%b);
}
int main()
{
int p,q;
printf("Enter two non equal primes\n");
scanf("%d %d",&p,&q);
int n=p*q;
int phi_n = (p-1)*(q-1);
int e=0;
printf("N is %d and Phi is %d\n",n,phi_n);
for(int i=2;i<phi_n;i++)
{
if(gcd(phi_n,i) == 1)
{
e=i;
break;
}
}
int d=0;
for(int i=2;i<phi_n;i++)
{

if((i*e)%phi_n == 1)
{
d=i;
break;
}
}
printf("D is %d and E is %d\n",d,e);
int msg;
printf("Enter the message\n");
scanf("%d",&msg);

long long ct=1;


for(int i=1;i<=e;i++)
{
ct=(((ct)%n)*(msg%n))%n;

}
printf("The cipher text is %lld\n",ct);
long long dt=1;
for(int i=1;i<=d;i++)
{
dt=(((dt)%n)*(ct%n))%n;

}
printf("The decrypted text is %lld\n",dt);
getch();
}

Diffie Hellman

#include<stdio.h>
#include<conio.h>
int gcd(int a,int b)
{
if(b == 0)
return a;
else
return gcd(b,a%b);
}
int main()
{
int q;
printf("Enter a prime number \n");

scanf("%d",&q);
printf("Enter A (primitive root of q)\n");
int A;
scanf("%d",&A);
int Z;
printf("Enter the value of Z less than q\n");
scanf("%d",&Z);
long long W=1;
for(int i=1;i<=Z;i++)
{
W= ((W%q)*(A%q))%q;
}
int Y;
printf("Enter the value of Y less than q\n");
scanf("%d",&Y);
long long S=1;
for(int i=1;i<=Y;i++)
{
S= ((S%q)*(A%q))%q;
}
printf("W is %lld and S is %lld\n\n\n",W,S);
long long secret_A=1;
for(int i=1;i<=Y;i++)
{
secret_A=((secret_A%q)*(W%q))%q;
}
long long secret_B=1;
for(int i=1;i<=Z;i++)

{
secret_B=((secret_B%q)*(S%q))%q;
}
printf("\n\nSecret for A is %lld and Secret Key of B is
%lld\n",secret_A,secret_B);
getch();
}

Das könnte Ihnen auch gefallen