You are on page 1of 21

BI TP THC HNH PHN MT M (12 tit)

Bi 1 : Kim tra s nguyn t :


#include <iostream.h>
#include <conio.h>
void
main()
{
clrscr();
int
x , n;
cout<<"nhap vao so nguyen can kiem tra: ";cin>>x;
n=2;
while(x%n>0)
{ n++;
}
if (n==x ) cout<<"La so nguyen to"; else
cout<<"Khongla so NT";
getch();
}
Bi 2 :To N s nguyn t u tin
#include <stdio.h>
#include <math.h>
#define N 100
int i,j,k;
long int q,r,n,pr[N+1];
int main()
{
pr[1]=2;n=3;j=1;
label1:j++;pr[j]=n;
if (j==N) goto label4;
label2: n+=2;k=2;
label3: q=n/pr[k];r=n%pr[k];
if(r==0) goto label2;
if (q<=pr[k]) goto label1;
k++;goto label3 ;
label4: for(i=1;i<=N;i++)
{

printf("%1d ",pr[i]);
if(i%10==0) printf(" ");
}
getchar();
return(n,j,k);
}/*main*/
Bi 3 Biu din theo c s B
/*BIEU DIEN CO SO B*/
#include<stdio.h>
#include<math.h>
/* input : two non_negative intergers a,b ,b>=2
output : base b representation of a */
int a,b;
long repre(int a,int b);
long repre0(int a,int b);
void main()
{
a=12;b=2;
repre(a,b);
a=8;b=4;
repre(a,b);
a=15245;b=32;
repre(a,b);
a=748;b=16;
repre(a,b);
a=14;b=2;
repre0(a,b);
getchar();
}/* main */
long repre(int a,int b)
{
int n,i,A[20];long x,q;
n=0;q=a/b;A[n]=a%b;
while(q>0)
{
n++;x=q;q=x/b;A[n]=x%b;
}/* end while */
printf("a=%1d b=%1d n=%1d\n " ,a,b,n);
for(i=0;i<=n;i++) printf(" A[%d]=%1d\n ",i,A[i]);
}
/* b-representation */
long repre0(int a,int b)
{
int A0,A1;

A0=a%b;A1=(a/b)%b;
printf("a=%ld d=%1d A0=%1d A1=%1d ",a,b,A0,A1);
}/* b-representation */
Bi 4 : Cng hai s biu din theo c s B
#include<stdio.h>
#include<math.h>
/* input : Two positive integers x,y in base b representation
output : x+y in base b representation */
long a,b,x,y,z,t;
int A[100],X[100],Y[100],Z[100],i,n,N;
long repre(long a,long b);
long add(long x,long y);
void main()
{
x=2748;y=659260;b=32;
a=x;
/*printf("a=%d b=%d x=%d y=%d \n",a,b,x,y);*/
repre(a,b);
N=n;
for(i=0;i<=n;i++) X[i]=A[i];
a=y;repre(a,b);if(N<n) N=n;
for(i=0;i<=n;i++) Y[i]=A[i];
printf("x=%ld y=%ld b=%ld N=%d \n",x,y,b,N);
for(i=0;i<=N;i++)
printf("X[%d]=%d Y[%d]=%d \n",i,X[i],i,Y[i]);
add(x,y); for(i=0;i<=N;i++)
printf("Z[%d]=%d \n",i,Z[i]);
/* verification */
z=Z[0];t=1;
for(i=1;i<=N+1;i++)
{t*=b;z+=(Z[i]*t);}
printf("z=%ld x+y=%ld \n",z,x+y);getchar();
}/* main */
long repre(long a,long b)
{
long q,qq ;
n=0 ; q =a/b ; A[n]=a%b ;
while(q>0) {n++ ; qq=q ; q=qq/b ; A[n]=qq%b;}
} /* b - representation */
long add(long x,long y)
{
int ii,c=0,tem;
/* c is the carry digit */
for(ii=0;ii<=n;ii++)
{
tem=(X[ii]+Y[ii]+c);
if(tem<b) {Z[ii]=tem;c=0;}
else {Z[ii]=tem-b;c=1;}
}/* ii */
Z[N+1]=c;
}/* add */

Bi 5 Nhn hai s theo c s B


# include<stdio.h>
# include<math.h>

/* input : 2 positive integers x , y in base b representation,


b>=2 , having N+1 digits respectively ;
output : x*y in base b representation , with N+M+2 digits */
long a,x,y,z,t,bb,b,k,B[20] ;
int A[20],X[20],Y[20],Z[20],i,n,N,M,A0,A1;
long repres(long x,long b);
long mult(long x,long y);
void main () /* cr5i. C , 21 / 6 / 1998 */
{
x=659260 ; y=2748 ; b=32 ;
repres(x,b) ; N=n ;
for(i=0 ; i<=n ; i++ ) X[i]=A[i] ;
repres(y,b) ; N=n ;
for(i=0 ; i<=n ; i++) Y[i]=A[i] ;
printf("x=%ld y=%ld b=%ld N=%ld M=%ld ",x,y,b,N,M);
for (i=0 ; i<=N ;i++)
printf("X[%d]=%d Y[%d]=%d",i,X[i],i,Y[i]);
mult (x,y) ;
for (i=0 ; i<=N+M+1 ; i++) printf("Z[%d]=%d ",i,Z[i]);
/* verification */
z=Z[0] ; t=1 ;
for(i=0 ; i<=(N+M+1) ; i++)
{t*=b ; z+=(Z[i]*t) ;}
printf ( "z=%ld x*y=%ld" ,z,x*y ) ;
} /*MAIN*/
long mult (long x,long y)
{
int ii,jj,ca ;
for(ii=0 ; ii<= N+M+1 ; ii++ )
Z[ii]=0 ;
for (ii=0 ; ii<=M ; ii++)
{
ca=0 ;
for(jj=0 ; jj<=N ; jj++ )
{
a=Z[ii+jj]+(X[jj]*Y[ii])+ca ;
k=1 ; while(k*b<=a) k++ ; k-- ;
A1=k ; A0=a-k*b;
Z[ii+jj]=A0 ; ca=A1;
} /* jj */
Z[ii+N+1]=A1;
} /* ii */
} /* mult */
long a0; int b0 ;
long repes (long a0 ,int b0 )
{
n=0 ; bb=1 ; B[0]=1 ;
while(bb<a0) {bb*=b0 ; n++ ; B[n]=bb ; } n-- ;
for (i=n ; i>0 ; i--)
{
bb=B[i] ;
k=1 ; while(( k*bb) <= a0) k++ ; k--;
A[i]=k ; a0-=k*bb ;
}
A[0]=a0;
} /* b - repres*/

Bi 5: Thut gii Beazout tnh gcd ca a & b


/*Bezout*/
#include <stdio.h>
#include <math.h>
long A,B;
long bezout(long A,long B);
void main() /*main*/
{
A=9; B=0; bezout(A,B);
A=13; B=17;bezout(A,B);
A=21; B=36; bezout(A,B);
A=2145378312; B=1256993; bezout(A,B);
getchar();
}
/*Main*/
long a,b;
long bezout(long a,long b)
{
long d,q,r,x,x1,x2,y,y1,y2,tem;
if (b==0)
{
d=a;x=1;y=0;
}
else
{
x2=1;x1=0;y2=0;y1=1;
while (b>0)
{
q=a/b;r=a-q*b;x=x2-q*x1;y=y2-q*y1;
a=b;b=r;x2=x1;x1=x;y2=y1;y1=y;
}
d=a;x=x2;y=y2;
}
tem=A*x+B*y-d;
/* if (y<0) y=A+y;*/
printf("A=%ld B=%ld d=%ld x=%ld y=%ld tem=%ld
",A,B,d,x,y,tem);
return(a,b);
}/*bezout*/

Bi 6 : Tnh ly tha modulo nghich o


/* Multiplicative inverse (ok!) */
#include <stdio.h>
#include <math.h>
long A,B;
long inverse(long B, long A);
void main()
{
B=28; A=25;
inverse(B,A);
B=13; A=3;
inverse(B,A);
B=12; A=5;
inverse(B,A);
B=13; A=3;
inverse(B,A);
getchar();
}
long a,b;
long inverse(long b,long a)
{
long d,q,r,x,x1,x2,y,y1,y2,tem;
if (b==0)
{
d=a;x=1;y=0;
}
else
{
x2=1;x1=0;y2=0;y1=1;
while (b>0)
{
q=a/b;r=a-q*b;x=x2-q*x1;y=y2-q*y1;
a=b;b=r;x2=x1;x1=x;y2=y1;y1=y;
}
d=a;x=x2;y=y2;
}

tem=A*x+B*y-d;
if (y<0) y=A+y;
printf("A=%ld B=%ld d=%ld x=%ld y=%ld tem=%ld \n
",A,B,d,x,y,tem);
}
Bi 7 : Chng trnh m dich dng RSA
/* Chuong trinh MA-DICH tren RSA . Plain text duoc bieu
dien duoi dang mot day so nguyen */
#include <stdio.h>
#include <math.h>
#include <conio.h>
#define I 4
#include<time.h>
long Q[40];
int n,N,M;
typedef long vector[I+1];
long MP(long long x,long y,long z);
long inverse(long x,long m),ME(long x,long y,long z);
long BR(long s);
void main()
{/*main*/
clrscr();
long q1,p1,M1,x1,phi1,e1,d1,xx,xx1,xx2,xx3,
p2,q2,M2,phi2,e2,d2,yy,yy1,yy2,yy3,now0,now,user_time;
now0=time(NULL);
p1=2699;q1=795659;
M1=p1*q1;
printf("p1=%ld q1=%ld M1=%ld ",p1,q1,M1);
phi1=(p1-1)*(q1-1);e1=3674911;
d1=inverse(e1,phi1);
printf("phi1=%ld e1=%ld d1=%ld
\n",phi1,e1,d1);printf("");
p2=5843;q2=367531;M2=p2*q2;phi2=(p2-1)*(q2-1);
e2=3674911;printf("p2=%ld q2=%ld M2=%ld ",p2,q2,M2);
d2=inverse(e2,phi2);
printf("phi2=%ld e2=%ld d2=%ld
\n",phi2,e2,d2);printf("");
xx=12345;
xx1=ME(xx,M1,e1);xx2=ME(xx1,M1,e1);xx3=ME(xx2,M1,e1);

yy1=ME(xx3,M2,e2);yy2=ME(yy1,M2,e2);yy3=ME(yy2,M2,e2);
cprintf("\n KET QUA MA : ",yy3);
printf("xx=%ld \n\nxx1=%ld xx2=%ld xx3=%ld
\n",xx,xx1,xx2,xx3);
printf("yy1=%ld yy2=%ld yy3=%ld \n",yy1,yy2,yy3);
yy2=ME(yy3,M2,d2);yy1=ME(yy2,M2,d2);xx3=ME(yy1,M2,d2);
xx2=ME(xx3,M1,d1);xx1=ME(xx2,M1,d1);xx=ME(xx1,M1,d1);/*
m=c^d modNN=RO */
cprintf("\n KET QUA DICH : ",xx);
printf("xx=%ld \n\nxx1=%ld xx2=%ld xx3=%ld
\n",xx,xx1,xx2,xx3);
printf("yy1=%ld yy2=%ld yy3=%ld \n",yy1,yy2,yy3);
now=time(NULL);user_time=now-now0;
printf("\nuser_time = %d seconds
",user_time,"seconds");getchar();
}/*main*/
long x0,m0,p0;
long ME(long x0,long m0,long p0)
{
long A0,p1,Z[40];int i1;
BR(p0);N=n;for (i1=0;i1<=N;i1++) Z[i1]=Q[i1];
/*for (i1=0;i1<=N;i1++)
printf("Q[%d]=%ld \n",i1,Q[i1]);getchar();*/
A0=x0%m0;p1=1;/* A0=x1modMM B pesentation of x1*/
if(p0>0);
{
if (Z[0]>0) p1=A0;
for(i1=1;i1<=N;i1++)
{
A0=MP(A0,A0,m0);
if(Z[i1]>0) p1=MP(A0,p1,m0);
}/*i1*/
}
return (p1);
}/*phep tinh luy thua modulo*/
long s;
long BR(long s)
{

int ii;
long x,q;
ii=0;x=s;q=(x>>1);Q[ii]=x-(q<<1);
while (q>0)
{
ii++;x=q;q=(x>>1);Q[ii]=x-(q<<1);
}
n=ii;
}/*Bit-Representation,bieu dien x theo bimary*/
long x,y,k;
long MP(long x,long y,long k)
{
int ii;long P,t1,t2,Y[40];double tem;t1=x;t2=y;
if(x<0) {x=-x;x=k-(x%k);} else x=x%k;
if(y<0) {y=-y;y=k-(y%k);} else y=y%k;
if ((x==0)||(y==0)) {P=0;goto label1;}
BR(y); M=n;
for(ii=0;ii<=M;ii++) Y[ii]=Q[ii];
if(Y[0]>0) P=x; else P=0;
for(ii=1;ii<=M;ii++)
{
tem=2.0*x;
if(tem>=k) tem-=k;
x=(long)tem;
if(Y[ii]>0)
{
tem+=P;
if(tem>=k) P=(long)(tem-k);
else P=(long)tem;
}
}/*ii*/
x=t1;
y=t2;
label1:return(P);
}/*phep nhan modulo*/
long b,a;/*0<b<a,Multicative inverce of b mod a*/
long inverse(long b,long a)
{
long A,B,d,q,r,x,x1,x2,y,y1,y2,tem;

A=a;B=b;
/*Dung Beazout*/
if(b==0)
{
d=a;x=1;y=0;
}/*if*/
else
{
x2=1;x1=0;y2=0;y1=1;
while (b>0)
{
q=a/b;
r=a-q*b;
x=x2-q*x1;
y=y2-q*y1;
a=b;b=r;x2=x1;x1=x;y2=y1;y1=y;
}/*while*/
d=a;x=x2;y=y2;
}/*else*/
tem=A*x+B*y-d;
if(y<0)
y=A+y;
return(y);
}/*inverse*/
Bi 8 : RSA m chui k t : plain text c nhp vo di dng mt chui k t
#include <iostream.h>
#include <conio.h>
#include <math.h>
#include <stdlib.h>
#include <stdio.h>
#include<string.h>
#include<iomanip.h>
long MP(long long ,long ,long ); //Nhan luy thua
long inverse(long ,long );
//Modulo nghich dao
long ME(long ,long ,long );
//Luy thua modulo
void BR(long );
//Doi sang dang bit (co so 2)
int SNT(long);
int snt( long);
long Bezout (long a, long b);//tinh gcd

long Q[40];
int n,N,M;
long MP(long long x,long y,long k){ //Nhan luy thua
int ii;
long P,t1,t2,Y[40];
double tem;
t1=x; t2=y;
if(x<0){
x = -x;
x = k - (x%k);
}
else x = x%k;
if(y<0){
y = -y;
y = k - (y%k);
}
else y = y%k;
if(x==0 || y==0){
P=0;
return P;
}
BR(y); M=n;
for(ii=0;ii<=M;ii++)
Y[ii]=Q[ii];
if(Y[0]>0)
P = x;
else
P = 0;
for(ii=1;ii<=M;ii++){
tem=2.0*x;
if(tem>=k)
tem -= k;
x = (long)tem;
if(Y[ii] > 0){
tem +=P;
if(tem>=k) P = (long)(tem-k);
else
P = (long)tem;
}
}
x = t1;

y = t2;
return P;
}
long inverse(long b,long a){ //Modulo nghich dao
long A,q,r,x,x1,x2,y,y1,y2;
A = a;
if(b == 0){
x = 1;
y = 0;
}
else{
x2 = 1; x1 = 0;
y2 = 0; y1 = 1;
while(b>0){
q = a/b;
r = a - q*b;
x = x2 - q*x1;
y = y2 - q*y1;
a = b;b = r;x2 = x1; x1 = x; y2 = y1;
y;
}
x = x2; y = y2;
}
if(y<0)
y = A + y;
return y;
}
long ME(long x0,long m0,long p0){
//Tnh Luy thua Modulo
long A0,p1,Z[40];
int i1;
BR(p0);
N=n;
for(i1=0;i1<=N;i1++)
Z[i1] = Q[i1];
A0 = x0%m0;
p1 = 1;
if(p0>0);{
if(Z[0]>0)
p1=A0;
for(i1=1;i1<=N;i1++){

y1 =

A0=MP(A0,A0,m0);
if(Z[i1]>0)
p1=MP(A0,p1,m0);
}
}
return p1;
}
void BR(long s){ //Doi sang dang bit (co so 2)
int ii;
long x,q;
ii = 0; x = s; q = (x>>1); Q[ii] = x - (q<<1);
while(q>0){
ii++;
x = q;
q = (x>>1); Q[ii] = x - (q<<1);
}
n = ii;
}
int SNT(long n){
if(n == 1 || n == 2)
return 1;
int i=3;while(n%i!=0)i++;i--;
if(n == i)
return -1;
return 1;
}
void main(){
clrscr();
long
q1,p1,M1,phi1,e1,d1,xx[25]={0},xx1[25]={0},xx2[25]={0},xx3
[25]={0};
//tao ngau nhien SNT
randomize();
long arr[30]={0},z,y,x;
cout<<"\n Day so nguyen to(Ban co the chon!):";
int i=0;
for( int j=0;j<50;j++)
{
if((z=snt(random(10000)))!=0)

{
arr[i]=z;i++;
}
}
for( j=0;j<i;j++)
cout<<setw(10)<<arr[j];
cout<<"\nNHAP CAP SO NGUYEN TO THU NHAT:";
do{
cout<<"\nNhap so nguyen to thu nhat p1 = ";
cin>>p1;
}while(SNT(p1)<0);
do{
cout<<"\nNhap so nguyen to thu hai q1 = ";
cin>>q1;
}while(SNT(q1)<0);
M1 = p1*q1;
cout<<"p1 = "<<p1<<"
q1 = "<<q1<<"
M1 =
"<<M1<<endl;
phi1 = (p1-1)*(q1-1);
do{
cout<<"\n nhap vao so e1:";cin>>e1;
}while(Bezout(e1,phi1)!=1);
d1=inverse(e1,phi1);
cout<<" phi1 = "<<phi1<<"
e1 = "<<e1<<"
d1 =
"<<d1;
char a[25];
cout<<"\nNHAP VAN BAN CAN MA HOA: "; gets(a);
int n= strlen(a);
cout<<"chieu dai chuoi = "<<n<<endl;
cout<<"\nVAN BAN CAN MA HOA "<<a;
for(int ii=0;ii<n;ii++)
{
if((a[ii]!=' '))
{
xx[ii]= (a[ii] - '0');
}
else
xx[ii]=a[ii];

}
cout<<"\n chuoi sau khi doi thanh so: "<<xx;
for( ii=0;ii<n;ii++)
xx1[ii]=ME(xx[ii],M1,e1);
for( ii=0;ii<n;ii++)
xx2[ii]=ME(xx1[ii],M1,e1);
for( ii=0;ii<n;ii++)
xx3[ii]=ME(xx2[ii],M1,e1);
cout<<"\nKET QUA MA (van ban ma):"<<xx3<<endl;
getch();
//giai ma
for( ii=0;ii<n;ii++)
xx2[ii]=ME(xx3[ii],M1,d1);
for( ii=0;ii<n;ii++)
xx1[ii]=ME(xx2[ii],M1,d1);
for( ii=0;ii<n;ii++)
xx[ii]=ME(xx1[ii],M1,d1);
//
cout<<"\n Sau giai ma (chua doi thanh ky tu):"<<xx;
for(ii=0;ii<n;ii++)
{
if(xx[ii]!=32)
a[ii]= char(xx[ii] + '0');
else
a[ii]=' ';
}
cout<<"\nKET QUA DICH (BANG RO): "<<a;
getch();
}
long Bezout (long a, long b)
{
long d,q,r,x,x1,x2,y,y1,y2;
if (b==0) {
d=a; x=1; y=0;
}
else {
x2=1;x1=0;y2=0;y1=1;
while (b>0) {
q=a/b;r=a-q*b;x=x2-q*x1;y=y2-q*y1;
a=b; b=r; x2=x1;x1=x;y2=y1;
y1=y;

}
d=a; x=x2;y=y2;
}
return d;
}
int snt(long n)
{
for(int i=2;i<n;i++)
{
if((n%i)==0)
{
n=0;
break;
} }
return n;
}
Bi 9: M ha mt file text (thu1.txt) dng RSA
/* M mt file text dng RSA */
#include <stdio.h>
#include <math.h>
#include <conio.h>
#define I 4
#include<time.h>
long Q[40];
FILE *fp1;
int n,N,M;
long q1,p1,M1,x1,phi1,e1,d1,xx,xx1,xx2,xx3,
p2,q2,M2,phi2,e2,d2,yy,yy1,yy2,yy3;
typedef long vector[I+1];
long MP(long long x,long y,long z);
long inverse(long x,long m),ME(long x,long y,long z);
long BR(long s);/*long codage(long x,long y,long z,long
t,long v);*/
void main()
{/*main*/
long now0,now,user_time,i2=0;
clrscr();
now0=time(NULL);
p1=2699;q1=795659;

M1=p1*q1;
printf("p1=%ld q1=%ld M1=%ld ",p1,q1,M1);
phi1=(p1-1)*(q1-1);e1=3674911;
d1=inverse(e1,phi1);
printf("phi1=%ld e1=%ld d1=%ld
\n",phi1,e1,d1);printf("");
p2=5843;q2=367531;M2=p2*q2;phi2=(p2-1)*(q2-1);
e2=3674911;
printf("p2=%ld q2=%ld M2=%ld ",p2,q2,M2);
d2=inverse(e2,phi2);
printf("phi2=%ld e2=%ld d2=%ld
\n",phi2,e2,d2);printf("");
fp1=fopen("a:\thu1.txt","rb");
printf("KET QUA MA : \n");
while(fread(&xx,sizeof(xx),1,fp1)==1)
{
/*codage(xx,M1,e1,M2,e2);*/
xx1=ME(xx,M1,e1);
xx2=ME(xx1,M1,e1);xx3=ME(xx2,M1,e1);
yy1=ME(xx3,M2,e2);
yy2=ME(yy1,M2,e2);yy3=ME(yy2,M2,e2);
i2++;printf("%lx ",yy3);
if(i2%7==0)printf("");
}
fclose(fp1);
now=time(NULL);user_time=now-now0;
printf("\n user_time = %d seconds
",user_time,"seconds");getchar();
}/*main*/
long x0,m0,p0;
long ME(long x0,long m0,long p0)
{
long A0,p1,Z[40];int i1;
BR(p0);N=n;for (i1=0;i1<=N;i1++) Z[i1]=Q[i1];
/*for (i1=0;i1<=N;i1++)
printf("Q[%d]=%ld \n",i1,Q[i1]);getchar();*/
A0=x0%m0;p1=1;/*printf ("A0=%ld N=%d ",A0,N);getchar();/*
A0=x1modMM B pesentation of x1*/

if(p0>0);
{
if (Z[0]>0) p1=A0;
for(i1=1;i1<=N;i1++)
{
A0=MP(A0,A0,m0);
if(Z[i1]>0) p1=MP(A0,p1,m0);
/*printf("i1=%d A0=%ld p1=%ld
\n",i1,A0,p1);*/
}/*i1*/
}/* printf("p1=%ld ",p1); getchar();*/
return (p1);
}/*phep tinh luy thua modulo*/
long s;
long BR(long s)
{
int ii;
long x,q;
ii=0;x=s;q=(x>>1);Q[ii]=x-(q<<1);
while (q>0)
{
ii++;x=q;q=(x>>1);Q[ii]=x-(q<<1);
}
n=ii;
}/*Bit-Representation,bieu dien bit*/
long x,y,k;
long MP(long x,long y,long k)
{
int ii;
long P,t1,t2,Y[40];
double tem;
t1=x;
t2=y;
if(x<0) {x=-x;x=k-(x%k);
} else x=x%k;
if(y<0) {y=-y;y=k-(y%k);
} else y=y%k;
if ((x==0)||(y==0))
{

P=0;
goto label1;
}
BR(y); M=n;
for(ii=0;ii<=M;ii++) Y[ii]=Q[ii];
if(Y[0]>0) P=x; else P=0;
for(ii=1;ii<=M;ii++)
{
tem=2.0*x;
if(tem>=k) tem-=k;
x=(long)tem;
if(Y[ii]>0)
{
tem+=P;
if(tem>=k) P=(long)(tem-k);
else P=(long)tem;
}
}/*ii*/
x=t1;
y=t2;
label1:
return(P);
}/*phep nhan modulo*/
long b,a;/*0<b<a,Multicative inverse of
long inverse(long b,long a)
{
long A,B,d,q,r,x,x1,x2,y,y1,y2,tem;
A=a;B=b;
if(b==0)
{
d=a;x=1;y=0;
}/*if*/
else
{
x2=1;x1=0;y2=0;y1=1;
while (b>0)
{
q=a/b;

b mod a*/

r=a-q*b;
x=x2-q*x1;
y=y2-q*y1;
a=b;b=r;x2=x1;x1=x;y2=y1;y1=y;
}/*while*/
d=a;x=x2;y=y2;
}/*else*/
tem=A*x+B*y-d;
if(y<0)
y=A+y;
return(y);
}/*inverse*/
/* long codage(long x, long y ,long z,long t,long v)
{
}/*codage*/
BI 10 :Bi tng hp :CHNG TRNH H THNG BO MT XC
THC DNG RSA
To menu chng trnh

Chn cng vic:


To kha (K)
Xc thc (A)
Bo mt (C)
Thot ra ngoi HT (X)

Bm (K) to kha :
Menu to kha :
1.To bng SNT ( hoc a SNT t BF song phi kim tra s NT)
2. Chn p&q trong bng
3. To kha :
Chng trnh t ng tnh N=p*q
Chng trnh tnh Fi = (p-1)*(q-1)
Yu cu chn e (nhp e t KB)
Chng trnh K/tra e c NTCN vi Fi
Nu e khng l s NT cng nhau vi Finhp li e

Chng trnh tnh tip d = emod N (Dng Beazout)


Xut cp kha (e,N) v (d,N)
V d p=3,q=5;p*q=15 ; Fi=(p-1)*(q-1)=8
Chn e = 3
d =3-1mod8 = 3
Xut (3,15) v (3,15)
Thot v main menu
Bm A ( Authenticate)
1.Yu cu nhp vn bn gc cn xc thc
- Nhp t KB s nguyn m
Trong thc t : Nhp text chuyn khi d liu thnh s nguyn
- Nhp kha t bng kha (d,N) (ca ti)
- M xc thc : c = md mod N gi i
- Bn nhn (cn xc thc) dng Public Key ca ti gii .--> gi c ti
ng l ti.
Bm C ( bo mt thng ip).
Nhp thng ip cn bo mt m t KB
Ly (e,N) ca bn nhn thng ip t bang kha hoc PK server
M bng (e,N) ca bn nhn : c= me modN gi c i.
Bn nhn dng (d,N) ca mnh gii mt. Nu gii c OK!
Thot ra menu chnh
Hi c tip tc Ko???
Yes ! Tr v menu chnh
No ! Bye bye!
Thot ra HH

You might also like