#include "stdio.h"
#include "conio.h"
Encryption()
{ int i,j,t,l,m;
int length;
char k,a,temp;
char S[256],T[256],K[256],k1[256];
char P[256],C[256];
clrscr();
printf("please input InitKey:");
for(i=0;i<256;i++)
{ K[i]=getch();
if (K[i]==13) break;
else printf("%c",K[i]);
}
length=i;
for(i=0;i<256;i++)
{ S[i]=i;
T[i]=K[i%length];
}
j=0;
for(i=0;i<256;i++)
{ j=(j+S[i]+T[i])%256;
temp=S[i];
S[i]=S[j];
S[j]=temp;
}
printf("\nplease input the plaintext:");
for(l=0;l<256;l++)
{ P[l]=getch();
if (P[l]==13) break;
else printf("%c",P[l]);
}
printf("\nThe ciphertext is:");
i=j=0;
for(m=0;m<l;m++)
{
i=(i+1)%256;
j=(j+S[i])%256;
temp=S[i];
S[i]=S[j];
S[j]=temp;
t=(S[i]+S[j])%256;
k=S[t];
k1[m]=k;
C[m]=P[m]^k;
printf("%c",C[m]);
}
printf("\n\nDo you want to decrypt it?(Y/N)");
a=getch();
if(a=='Y'||a=='y')
{
printf("\nThe plaintext is:");
i=j=0;
for(l=0;l<m;l++)
{
P[l]=C[l]^k1[l];
printf("%c",P[l]);
}
}
getch();
}
Decryption()
{
int i,j,t,l,m;
int length;
char k,temp;
char S[256],T[256],K[256];
char P[256],C[256];
clrscr();
printf("please input InitKey:");
for(i=0;i<256;i++)
{ K[i]=getch();
if (K[i]==13) break;
else printf("%c",K[i]);
}
length=i;
for(i=0;i<256;i++)
{ S[i]=i;
T[i]=K[i%length];
}
j=0;
for(i=0;i<256;i++)
{ j=(j+S[i]+T[i])%256;
temp=S[i];
S[i]=S[j];
S[j]=temp;
}
printf("\nplease input the ciphertext:");
for(m=0;m<256;m++)
{ C[m]=getch();
if (C[m]==13) break;
else printf("%c",C[m]);
}
printf("\nThe plaintext is:");
i=j=0;
for(l=0;l<m;l++)
{
i=(i+1)%256;
j=(j+S[i])%256;
temp=S[i];
S[i]=S[j];
S[j]=temp;
t=(S[i]+S[j])%256;
k=S[t];
P[l]=C[l]^k;
printf("%c",P[l]);
}
getch();
}
main()
{
int choice;
do
{ clrscr();
printf(" 1.Encryption \n");
printf(" 2.Decryption \n");
printf(" 0.Exit \n");
printf("please input your choice:");
scanf("%d",&choice);
switch(choice)
{ case 1: Encryption();break;
case 2: Decryption();break;
case 0: break;
}
}while(choice!=0);
getch();
}