Thread View: be.comp.programming
1 messages
1 total messages
Started by Frank
Sun, 07 Nov 2004 16:36
Urgent C programming problems
Author: Frank
Date: Sun, 07 Nov 2004 16:36
Date: Sun, 07 Nov 2004 16:36
192 lines
5854 bytes
5854 bytes
Dear fellows,
I am new to C.My tutor ask us to write a C program with limitations,for
decoding and encoding similiar to RSA.
The question are as follows:
----------------------------------------------------------------------------
-------------------
To encode a message,one needs n and e.The value n is a product of any two
prime numbers p and q.The value e is any number less than n that cannot be
evenly divided into y(i.e. y/e would have a reminder),where
y=(p-1)*(q-1).The values n and e can be published in a newspaper or posted
on the internet,so anybody can encrypt messages.The original character is
than encoded to a numerical value c using the formula:
c=m^e mod n
where m is a numerical representation of the original
character(65=A,66=B..etc)
Now,to decode a messages,one needs d.The value d is a number that statisfies
the formula:
(e*d) mod y ==1
where e and y are the values defined in the encoding step.The original
character m can be derived from the encrypted character c by using the
formula:
m=c^d mod n
To write a program that encodes and decodes message using this system,you
will need to generate the oublic and secret key pairs:
Public key (KU)=(e,n) Secret key KR=(d,n)
Limitations:
1.Only functions is allowed
2.Simple Calculations(+-*/) is allowed.No power (x^y) is allowed
3.For the calculations,((a mod n)*(b mod n)) mod n == (a* mod n
fwongmc Posted: Nov 5 2004, 05:17 PM
Newbie
Group: Members
Posts: 9
Member No.: 683
Joined: 5-November 04
(cont'd)
3.Hints(a mod n)*(b mod n)) mod n == (a*b)mod n
----------------------------------------------------------------------------
-------------------
Sample run:
Do you want to start? (Y/N) y
Please enter the public key e:5
Please enter the common key n:119
Please enter the private key e:77
Encrypt or Decrypt? (E/D) e
Please enter 5 characters.
abcde
The encrypted message in number format is 20 98 29 52 35
Do you want to play again? (y/n)y
Encrypt or Decrypt? (E/D) d
Please enter 5 numbers.
20 98 29 53 33
The decrypted message char format is a b c d e
Do you want to play again? (y/n)n
Thank you for using this program.
------------------------------------------
C / C++ Code:
#include <stdio.h>
int prime=1;
int i,number;
int num1,num2,num3,num4,num5;
int e,n,d,y,p,q;
int is_prime(int n){
for (i=2;i<n;i++){
if(n%i==0)
return 0;
}
return 1;
}
int decrypt(int num){
int a=1;
int i;
{for (i=1;i<=e;i++){
a=(num%n)*a;
}
num=(a%n);
return (num);
}
return 0;
}
int encrypt(int num){
int a=1;
int i;
{for (i=1;i<=d;i++){
a=(num%n)*a;
}
num=(a%n);
return (num);
}
return 0;
}
int check_div(int x){
int i=1;
int a=0;
{
do {
a=(n%i);
i++; }while (n%i>0);
return (i);
}
return 0;
}
int main (void){
char choice,choice2;
char choice3='y';
printf ("Do you want to start?");
scanf("%c",&choice);
if ((choice=='n')||(choice=='N')){
printf ("Thank you for using this program.");}
if ((choice=='y')||(choice=='Y'))
printf ("Please enter the Public Key e:");
scanf ("%d",&e);
printf ("Please enter the common key n:");
scanf ("%d",&n);
printf ("Please enter the private key:");
scanf ("%d",&d);
/*To find the factors of n QUESTION 2*/
if (check_div(n)>0){
p=check_div(n);
q=n/p;}
/*To check if p and q are prime numbers*/
if ((is_prime(p)==1)&&(is_prime(q)==1)){
y=(p-1)*(q-1);}
if ((is_prime(p)==0)||(is_prime(q)==0)){
printf ("Check your common key.");}
/*Prompt user to select encrypt nor decrypt*/
printf ("Encrypt or Decrypt? (E/D)");
scanf ("%c",&choice2);
do {
if ((choice2=='e')||(choice2=='E')){
printf ("Please enter 5 characters.");
scanf ("%d %d %d %d %d",&num1,&num2,&num3,&num4,&num5);
printf ("The encrypted message in number format is %d %d %d %d
%d",decrypt(num1),decrypt(num2),decrypt(num3),decrypt(num4),decrypt(num5));
printf ("Do you want to play again ?(Y/N)");
scanf ("%c",&choice3);}
if ((choice2=='d')||(choice2=='D')){
printf ("Please enter 5 numbers.");
scanf ("%d %d %d %d %d",&num1,&num2,&num3,&num4,&num5);
if ((e*d)%y==1){
printf ("The decrypted message char format is %c %c %c %c
%c",encrypt(num1),encrypt(num2),encrypt(num3),encrypt(num4),encrypt(num5));}
printf ("Do you want to play again ?(Y/N)");
scanf ("%c",&choice3);}
} while ((choice3=='y')||(choice3=='Y'));
printf ("Thank you for using this program.");
}
but it seems that it can't works...it stop when asking user for
decrypt/encrypt.I don't know wether is the condition statement wrong and/or
the function wrong(can either be <decrypt>,<encrypt>,<check_div>).Can anyone
help me to check check and tell me what the error was?URGENT!Thanks.i
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads