Thursday, 3 April 2014

Programs on cryptography

Finding the generator for group  * mod p (p is a prime number)

int gen(int p)
{
int i,j,k,l;
for(i=2;i<p;i++)
{
k=1;
      for(j=1;;j++)
      {
      k*=i;
      k%=p;
      printf("%d ",k);
      if(k==1)
      break;
      }
if(j==(p-1))
return i;
}

}

Finding the jacobi value

#include<stdio.h>
main()
{
int i,j,k,l,m,n;
i=1;
j=-1;
printf("enter the two numbers\n");
scanf("%d %d",&m,&n);
while(m>1)
{

      if(m%2==0)
      {
printf("in if \n");
            if(n%8==1 || n%8==7)
            {
                  i=i*1;
            }
            else
            i*=j;
      m/=2;
      }
      else if(m>n)
      {
printf("else if\n");
m=m%n;           
      }
      else
      {
printf("value is %d\n",(m%4)==3&&(n%4)==3);
            if((m%4)==3&&(n%4)==3)
            {
                  i*=j;
            printf("%d %d %d \n",i,m,n);
            }
            k=n;
            n=m;
            m=k;
printf("%d",i);
      }
printf(" %d %d %d\n",i,m,n);
}

}
 

Finding m-1 mod n using extended euclidean algorithm

int exeu(int m,int n)
{
int i,j,k,l,a1=1,a2=0,a3,b1=0,b2=1,b3,c1,c2,c3;
      if(m>n)
      {
            i=m;
            j=n;
      }
      else
      {
            i=n;
            j=m;
      }
a3=i;
b3=j;
      while(b3>0)
      {
      c1=a1-(a3/b3)*b1;
      c2=a2-(a3/b3)*b2;
      c3=a3%b3;
      a1=b1;
      a2=b2;
      a3=b3;
      b1=c1;
      b2=c2;
      b3=c3;
      }
            if(i==m)
            {
                  if(a1>0)
                  return a1;
                  else return n+a1;
            }
            else
            {
                  if(a2>0)
                  return a2;
                  else return n+a2;
            }
}

 Elgamal cryptosystem in C

#include<stdio.h>
main()
{
int i,j,k,l,m,x,n,p,g,c1=1,c2=1,c3=1;
printf("enter the prime number do you want to take\n");
scanf("%d",&p);
g=gen(p);
printf("enter the private key do you want to take\n");
scanf("%d",&x);
int y=1;
      for(i=0;i<x;i++)
      {
      y*=g;
      y%=p;
      }
printf("the public key of the crypto system is (%d %d %d)\n",g,y,p);
printf("the encryption proccess\n");
printf("enter the number do you want to encrypt\n");
scanf("%d",&m);

printf("the random number you want to take\n");
      scanf("%d",&k);
      for(i=0;i<k;i++)
      {
      c1*=g;
      c2*=y;
      c1%=p;
      c2%=p;
      }
c2*=m;
printf("the encrypted message is (%d %d)\n",c1,c2);
printf("the decryption process is \n");
            for(i=0;i<x;i++)
            c3*=c1;
c3=exeu(c3,p);
n=c2*c3;
n%=p;
printf("the decrypted message is %d \n",n);
}

int exeu(int m,int n)
{
int i,j,k,l,a1=1,a2=0,a3,b1=0,b2=1,b3,c1,c2,c3;
      if(m>n)
      {
            i=m;
            j=n;
      }
      else
      {
            i=n;
            j=m;
      }
a3=i;
b3=j;
      while(b3>0)
      {
      c1=a1-(a3/b3)*b1;
      c2=a2-(a3/b3)*b2;
      c3=a3%b3;
      a1=b1;
      a2=b2;
      a3=b3;
      b1=c1;
      b2=c2;
      b3=c3;
      }
            if(i==m)
            {
                  if(a1>0)
                  return a1;
                  else return n+a1;
            }
            else
            {
                  if(a2>0)
                  return a2;
                  else return n+a2;
            }
}
int gen(int p)
{
int i,j,k,l;
for(i=2;i<p;i++)
{
k=1;
      for(j=1;;j++)
      {
      k*=i;
      k%=p;
      if(k==1)
      break;
      }
if(j==(p-1))
return i;
}
}
 

No comments:

Post a Comment