亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? rsa.c

?? 一個獨立純C文件
?? C
?? 第 1 頁 / 共 2 頁
字號:
#include<stdio.h>
#include<string.h>
#include <stdlib.h>   
#include <time.h>  
#include <math.h>
#include <malloc.h>
#define MAX 100
#define LEN sizeof(struct slink)
void sub(int a[MAX],int b[MAX] ,int c[MAX] );
struct slink
{ 
	int  bignum[MAX];
	/*bignum[98]用來標記正負號,1正,0負bignum[99]來標記實際長度*/
    struct slink *next;
};

/*/--------------------------------------自己建立的大數運算庫-------------------------------------*/
void  print(  int a[MAX] )
{
	int i;
	for(i=0;i<a[99];i++)
		printf("%d",a[a[99]-i-1]);
	printf("\n\n");
	return;
}
int  cmp(int a1[MAX],int a2[MAX])
{   
	int l1, l2;
	int i;
	l1=a1[99];
	l2=a2[99];
	if (l1>l2)
		return 1;
    if (l1<l2)
        return -1;
    for(i=(l1-1);i>=0;i--)
    {
		if (a1[i]>a2[i])
			return 1 ;
	    if (a1[i]<a2[i])
		    return -1;
    }
    return 0;
}
void mov(int a[MAX],int *b)
{
	int j;
	for(j=0;j<MAX;j++)
		b[j]=a[j];
	return ;
}
void mul(int a1[MAX],int a2[MAX],int *c)
{
	int i,j;
	int y;
	int x;
	int z;
	int w;
	int l1, l2;
	l1=a1[MAX-1];
	l2=a2[MAX-1];
	if (a1[MAX-2]=='-'&& a2[MAX-2]=='-')
		c[MAX-2]=0;
	else
		if (a1[MAX-2]=='-')
			c[MAX-2]='-';
		else
			if (a2[MAX-2]=='-')
				c[MAX-2]='-';
	for(i=0;i<l1;i++)
	{
		for(j=0;j<l2;j++)
		{
			x=a1[i]*a2[j];
			y=x/10;
			z=x%10;
			w=i+j;
			c[w]=c[w]+z;
			c[w+1]=c[w+1]+y+c[w]/10;
			c[w]=c[w]%10;
		}
	}
	w=l1+l2;
	if(c[w-1]==0)
		w=w-1;
	c[MAX-1]=w;
	return;
} 
void add(int a1[MAX],int a2[MAX],int *c)
{
	int i,l1,l2;
	int len,temp[MAX];
	int k=0;
	l1=a1[MAX-1];
	l2=a2[MAX-1];
	if((a1[MAX-2]=='-')&&(a2[MAX-2]=='-'))
	{
		c[MAX-2]='-';
	}
	else 
		if (a1[MAX-2]=='-')
		{
			mov(a1,temp);
			temp[MAX-2]=0;
			sub(a2,temp,c);
			return;
		}
		else
			if (a2[MAX-2]=='-')
			{
				mov(a2,temp);
				temp[98]=0;
				sub(a1,temp,c);
				return;
			}
			if(l1<l2)
				len=l1;
			else 
				len=l2;
			for(i=0;i<len;i++)
			{
				c[i]=(a1[i]+a2[i]+k)%10;
				k=(a1[i]+a2[i]+k)/10;
			}
			if(l1>len)
			{
				for(i=len;i<l1;i++)
				{
					c[i]=(a1[i]+k)%10;
					k=(a1[i]+k)/10;   
				}
				if(k!=0)
				{
					c[l1]=k;
					len=l1+1;
				}
				else
					len=l1;
			}
			else
			{
				for(i=len;i<l2;i++)
				{
					c[i]=(a2[i]+k)%10;
					k=(a2[i]+k)/10;   
				}
				if(k!=0)
				{
					c[l2]=k;
					len=l2+1;
				}
				else
					len=l2;
			}
			c[99]=len;
			return;
} 
void sub(int a1[MAX],int a2[MAX],int *c)
{
	int i,l1,l2;
	int len,t1[MAX],t2[MAX];
	int k=0;
	l1=a1[MAX-1];
	l2=a2[MAX-1];
	if ((a1[MAX-2]=='-') && (a2[MAX-2]=='-'))
	{
		mov(a1,t1);
        mov(a2,t2);
		t1[MAX-2]=0;
        t2[MAX-2]=0;
		sub(t2,t1,c);
		return;
	}
	else 
		if( a2[MAX-2]=='-')
		{
			mov(a2,t2);
			t2[MAX-2]=0;
			add(a1,t2,c);
			return;
		}
		else
			if (a1[MAX-2]=='-')
			{
				mov(a2,t2);
				t2[MAX-2]='-';
				add(a1,t2,c);
				return;
			}
			if(cmp(a1,a2)==1)
			{
				len=l2;
				for(i=0;i<len;i++)
				{
					if ((a1[i]-k-a2[i])<0)
					{
						c[i]=(a1[i]-a2[i]-k+10)%10;
						k=1;
					}
					else 
					{
						c[i]=(a1[i]-a2[i]-k)%10;
						k=0;
					}
			}
			for(i=len;i<l1;i++)
			{
				if ((a1[i]-k)<0)
				{
					c[i]=(a1[i]-k+10)%10;
					k=1;
				}
				else 
				{
					c[i]=(a1[i]-k)%10;
					k=0;
				} 
			}
			if(c[l1-1]==0)/*使得數組C中的前面所以0字符不顯示了,如1000-20=0980--->顯示為980了*/
			{
				len=l1-1;
				i=2;
				while (c[l1-i]==0)/*111456-111450=00006,消除0后變成了6;*/
				{
					len=l1-i;
					i++;
				}
			}
			else 
			{
				len=l1;
			}

		}
		else
			if(cmp(a1,a2)==(-1))
			{
				c[MAX-2]='-';
				len=l1;
				for(i=0;i<len;i++)
				{
					if ((a2[i]-k-a1[i])<0)
					{
						c[i]=(a2[i]-a1[i]-k+10)%10;
						k=1;
					}
					else 
					{
						c[i]=(a2[i]-a1[i]-k)%10;
						k=0;
					}
			}
			for(i=len;i<l2;i++)
			{
				if ((a2[i]-k)<0)
				{
					c[i]=(a2[i]-k+10)%10;
					k=1;
				}
				else 
				{
					c[i]=(a2[i]-k)%10;
					k=0;
				}   
			}
			if(c[l2-1]==0)
			{  
				len=l2-1;
				i=2;
				while (c[l1-i]==0)
				{
					len=l1-i;
					i++;
				}

			}
			else len=l2;
			}
			else
				if(cmp(a1,a2)==0)
				{
					len=1;
					c[len-1]=0;
				}
				c[MAX-1]=len;
				return;
}
void  mod(int a[MAX],int b[MAX],int  *c)/*/c=a mod b//此處A和C的數組都改變了*/
{	
	int d[MAX];
	mov (a,d);
	while (cmp(d,b)!=(-1))/*/c=a-b-b-b-b-b.......until(c<b)*/
	{
		sub(d,b,c);
		mov(c,d);/*/c復制給a*/
	}	
	return ;
}
void  divt(int t[MAX],int b[MAX],int  *c ,int *w)/*//試商法//調用以后w為a mod b, C為a  div b;*/
{
	int a1,b1,i,j,m;/*w用于暫時保存數據*/
	int d[MAX],e[MAX],f[MAX],g[MAX],a[MAX];
	
	mov(t,a);
		for(i=0;i<MAX;i++)
	   e[i]=0;
	for(i=0;i<MAX;i++)
	   d[i]=0;
	for(i=0;i<MAX;i++) g[i]=0;
	a1=a[MAX-1];
    b1=b[MAX-1];
	if (cmp(a,b)==(-1))
	{
		c[0]=0;
		c[MAX-1]=1;
		mov(t,w);
		return;
	}
	else if (cmp(a,b)==0)
	{
		c[0]=1;
        c[MAX-1]=1;
		w[0]=0;
		w[MAX-1]=1;
		return;
	}
		m=(a1-b1);
    for(i=m;i>=0;i--)/*341245/3=341245-300000*1--->41245-30000*1--->11245-3000*3--->2245-300*7--->145-30*4=25--->25-3*8=1*/
	{
      for(j=0;j<MAX;j++)
        d[j]=0;
		d[i]=1;
		d[MAX-1]=i+1;
		mov(b,g);
        mul(g,d,e);

	
		while (cmp(a,e)!=(-1))
		{
			c[i]++;
			sub(a,e,f);
		    mov(f,a);/*f復制給g*/
		}

     for(j=i;j<MAX;j++)/*高位清零*/
        e[j]=0;
	
	}
	mov(a,w);
	if (c[m]==0) c[MAX-1]=m;
	else c[MAX-1]=m+1;

	return;
}

void mulmod(int a[MAX] ,int b[MAX] ,int n[MAX],int *m)/*解決 了 m=a*b mod n;*/
{
	int c[MAX],d[MAX];
	int i;
	for(i=0;i<MAX;i++)
		d[i]=c[i]=0;
	mul(a,b,c);
    divt(c,n, d,m);
    for(i=0;i<m[MAX-1];i++)
		printf("%d",m[m[MAX-1]-i-1]);
		printf("\nm  length is :  %d \n",m[MAX-1]);
}
/*接下來的重點任務是要著手解決 m=a^p  mod n的函數問題。*/
void expmod(int a[MAX] ,int p[MAX] ,int n[MAX],int *m)
{
	int t[MAX],l[MAX],temp[MAX]; /*/t放入2,l放入1;*/
	int w[MAX],s[MAX],c[MAX],b[MAX],i;
	for(i=0;i<MAX-1;i++)
		b[i]=l[i]=t[i]=w[i]=0;
	t[0]=2;t[MAX-1]=1;
	l[0]=1;l[MAX-1]=1;
    mov(l,temp);
	mov(a,m);
    mov(p,b);

	while(cmp(b,l)!=0)
	{
		for(i=0;i<MAX;i++)
		w[i]=c[i]=0;
		divt(b,t,w,c);/*// c=p mod 2  w= p /2*/	
		mov(w,b);/*//p=p/2*/
			if(cmp(c,l)==0) /*/余數c==1*/
			{
				for(i=0;i<MAX;i++)
					w[i]=0;
					mul(temp,m,w);
					mov(w,temp);	
					for(i=0;i<MAX;i++)
						w[i]=c[i]=0;
						divt(temp,n,w,c);/* /c為余c=temp % n,w為商w=temp/n */
						mov(c,temp);
			}
			for(i=0;i<MAX;i++)
				s[i]=0;
				mul(m,m,s);//s=a*a
				for(i=0;i<MAX;i++)
					c[i]=0;
					divt(s,n,w,c);/*/w=s/n;c=s mod n*/
					mov (c,m);
	}
	for(i=0;i<MAX;i++)
		s[i]=0;
	mul(m,temp,s);
	for(i=0;i<MAX;i++)
		c[i]=0;
	divt(s,n,w,c);
	mov (c,m);/*余數s給m*/
	m[MAX-2]=a[MAX-2];/*為后面的漢字顯示需要,用第99位做為標記*/
	return;/*/k=temp*k%n;*/
}
int   is_prime_san(int p[MAX] )
{
 
   int i,a[MAX],t[MAX],s[MAX],o[MAX]; 
   for(i=0;i<MAX;i++)
	   s[i]=o[i]=a[i]=t[i]=0;
   t[0]=1;
   t[MAX-1]=1;
   a[0]=2;// { 2,3,5,7 }
   a[MAX-1]=1;

   sub(p,t,s);

   expmod ( a, s, p ,o);
       if ( cmp(o,t) != 0 ) 
	   {
			return 0;
	   }

   a[0]=3;
   for(i=0;i<MAX;i++)  o[i]=0;

   expmod ( a, s, p ,o);
       if ( cmp(o,t) != 0 ) 	   
	   {
			return 0;
	   }

      a[0]=5;
   for(i=0;i<MAX;i++)  o[i]=0;

   expmod ( a, s, p ,o);
   if ( cmp(o,t) != 0 ) 
   {	   
	  return 0;
   }

     a[0]=7;
   for(i=0;i<MAX;i++)  o[i]=0;

   expmod ( a, s, p ,o);

	if ( cmp(o,t) != 0 ) 
	{

		return 0;
	}

	return 1;
}
int coprime(int e[MAX],int s[MAX]) /*//// 求兩個大數之間是否互質////*/
{
    int a[MAX],b[MAX],c[MAX],d[MAX],o[MAX],l[MAX];
    int i;
	for(i=0;i<MAX;i++)
		l[i]=o[i]=c[i]=d[i]=0;
	o[0]=0;o[MAX-1]=1;
	l[0]=1;l[MAX-1]=1;
	mov(e,b);
	mov(s,a);
	do
	{
		if(cmp(b,l)==0)
		{
			return 1;
		}
		for(i=0;i<MAX;i++)
			c[i]=0;
		divt(a,b,d,c);
		mov(b,a);/*b--->a*/
		mov(c,b);/*c--->b*/
	}
	while(cmp(c,o)!=0);/*	printf("Ihey are  not coprime!\n");*/
		return 0;
}
void prime_random(int *p,int *q)
{
	int i,k;
	time_t t; 
	 p[0]=1;
	 q[0]=3;
	 
//	p[19]=1;
//	q[18]=2;
	
	p[MAX-1]=10;
    q[MAX-1]=11;

 
	do
	{
			t=time(NULL);
    srand((unsigned long)t);
	for(i=1;i<p[MAX-1]-1;i++)
	{
	k=rand()%10;
	p[i]=k;
	}
	k=rand()%10;
	while (k==0)
	{
		k=rand()%10;
	}
	p[p[MAX-1]-1]=k;

	}while((is_prime_san(p))!=1);
		printf("素數 p 為  : ");
    for(i=0;i<p[MAX-1];i++)
	{
	printf("%d",p[p[MAX-1]-i-1]);
	}
    printf("\n\n");
		do
	{
			t=time(NULL);
    srand((unsigned long)t);
	for(i=1;i<q[MAX-1];i++)
	{
	k=rand()%10;
	q[i]=k;
	}

	}while((is_prime_san(q))!=1);
		printf("素數 q 為 : ");
    for(i=0;i<q[MAX-1];i++)
	{
	printf("%d",q[q[MAX-1]-i-1]);
	}
    printf("\n\n");
	return;
}
	
void  erand(int e[MAX],int m[MAX])
{
	int i,k;
	time_t t;
	e[MAX-1]=5;
	printf("隨機產生一個與(p-1)*(q-1)互素的 e :");
		do
	{
			t=time(NULL);
    srand((unsigned long)t);
	for(i=0;i<e[MAX-1]-1;i++)
	{
	k=rand()%10;
	e[i]=k;
	}
	while((k=rand()%10)==0)
		k=rand()%10;
	e[e[MAX-1]-1]=k;
	}while(coprime( e, m)!=1);
    for(i=0;i<e[MAX-1];i++)
	{
	printf("%d",e[e[MAX-1]-i-1]);
	}
    printf("\n\n");
	return ;
}

void rsad(int e[MAX],int g[MAX],int *d)
{
	int   r[MAX],n1[MAX],n2[MAX],k[MAX],w[MAX];
	int     i,t[MAX],b1[MAX],b2[MAX],temp[MAX];
	mov(g,n1);
	mov(e,n2);
	for(i=0;i<MAX;i++)
		k[i]=w[i]=r[i]=temp[i]=b1[i]=b2[i]=t[i]=0;
	b1[MAX-1]=0;b1[0]=0;/*/b1=0;*/
	b2[MAX-1]=1;b2[0]=1;/*/b2=1;*/
	while(1)
	{

	 for(i=0;i<MAX;i++)
				k[i]=w[i]=0;
		divt(n1,n2,k,w);/*/k=n1/n2;*/
	 for(i=0;i<MAX;i++)
		temp[i]=0;
		mul(k,n2,temp);/*/temp=k*n2;*/
    for(i=0;i<MAX;i++)
		r[i]=0;
        sub(n1,temp,r);

		if((r[MAX-1]==1) && (r[0]==0))/*/r=0*/
		{
			break;
		}
		else
		{
			mov(n2,n1);/*/n1=n2;*/
			mov( r,n2);/*/n2=r;*/
			mov(b2, t);/*/t=b2;*/
			for(i=0;i<MAX;i++)
		      temp[i]=0;
			mul(k,b2,temp);/*/b2=b1-k*b2;*/
			for(i=0;i<MAX;i++)
		      b2[i]=0;
			sub(b1,temp,b2);
			mov(t,b1);
		}
	}

			for(i=0;i<MAX;i++)
				t[i]=0;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
美女在线一区二区| 岛国精品在线播放| 亚洲欧洲性图库| 欧美日本一道本| 99免费精品视频| 精品一区二区精品| 亚洲国产三级在线| 自拍视频在线观看一区二区| 日韩精品综合一本久道在线视频| 91免费版pro下载短视频| 国产一区亚洲一区| 石原莉奈在线亚洲二区| 亚洲欧美二区三区| 久久美女高清视频| 91麻豆精品91久久久久久清纯| 91视频你懂的| 成人免费视频播放| 国产在线国偷精品免费看| 日韩激情一二三区| 亚洲一二三专区| 26uuu色噜噜精品一区二区| 欧美日韩成人激情| 色狠狠一区二区| bt欧美亚洲午夜电影天堂| 国产一区二区三区免费观看| 视频一区中文字幕国产| 亚洲一级在线观看| 亚洲国产中文字幕| 亚洲图片自拍偷拍| 亚洲综合色自拍一区| 亚洲女同女同女同女同女同69| 亚洲国产成人一区二区三区| 久久色在线观看| 久久亚洲一级片| 日韩免费观看高清完整版在线观看| 欧美色爱综合网| 91官网在线免费观看| 91久久精品一区二区三区| 不卡的av在线| av不卡在线播放| 91在线丨porny丨国产| 99综合电影在线视频| 99久久精品国产毛片| 91亚洲永久精品| 97久久精品人人爽人人爽蜜臀| 不卡的av在线| 一本在线高清不卡dvd| 一本到不卡精品视频在线观看| 91在线视频播放地址| 色婷婷一区二区| 色综合av在线| 欧美精品日韩精品| 日韩三级免费观看| 久久亚洲精华国产精华液| 国产午夜亚洲精品羞羞网站| 久久精品亚洲麻豆av一区二区| 国产午夜精品在线观看| 国产精品成人免费精品自在线观看| 中文字幕欧美日韩一区| 亚洲欧美日韩中文播放| 亚洲第一av色| 免费久久99精品国产| 国产一区二区三区最好精华液| 高清在线不卡av| 色综合天天综合| 久久综合色播五月| 久久精品一区八戒影视| 日韩美女视频一区二区| 午夜影视日本亚洲欧洲精品| 秋霞影院一区二区| 国产v日产∨综合v精品视频| 91啪亚洲精品| 欧美电影在线免费观看| 久久综合九色综合97婷婷| 国产精品久久久爽爽爽麻豆色哟哟 | 日韩精品在线网站| 2020国产精品自拍| 亚洲精品写真福利| 蜜桃在线一区二区三区| 成人午夜私人影院| 欧美日韩免费观看一区二区三区| 精品日韩欧美一区二区| **网站欧美大片在线观看| 蜜臀久久99精品久久久久宅男| 成人午夜av电影| 欧美精品 国产精品| 久久精品免费在线观看| 亚洲高清视频的网址| 精品一区二区三区免费| 成人一级片在线观看| 欧美精品久久天天躁| 国产精品无遮挡| 日本aⅴ免费视频一区二区三区| 成人免费高清在线观看| 欧美一级高清大全免费观看| 国产精品国产三级国产aⅴ原创| 日韩国产一二三区| av一区二区三区四区| 日韩免费电影网站| 亚洲国产精品一区二区www| 国产黄人亚洲片| 日韩一级成人av| 一二三四社区欧美黄| 国产成人免费视频网站高清观看视频| 在线精品观看国产| 国产精品成人免费在线| 国产一区二区91| 欧美一级黄色片| 亚洲高清免费一级二级三级| 91亚洲国产成人精品一区二区三 | 欧美国产亚洲另类动漫| 免费观看91视频大全| 欧美性猛交xxxx黑人交| 国产精品麻豆视频| 国产精品1区2区| 精品国产乱码久久久久久图片| 亚洲国产毛片aaaaa无费看| 不卡在线观看av| 亚洲国产精品高清| 国产在线看一区| 欧美成人性战久久| 美女网站一区二区| 在线播放日韩导航| 亚洲一区二区高清| 在线视频国内自拍亚洲视频| 中文字幕一区二区三区乱码在线| 国产精品中文有码| 精品国产麻豆免费人成网站| 男男视频亚洲欧美| 欧美一区二区三区四区视频| 亚洲一区二区av电影| 欧美自拍偷拍午夜视频| 一区二区三区在线视频播放 | 在线亚洲欧美专区二区| 成人欧美一区二区三区黑人麻豆 | 波多野洁衣一区| 欧美国产视频在线| 国产成人综合在线| 欧美国产日韩亚洲一区| 粉嫩久久99精品久久久久久夜| 国产色婷婷亚洲99精品小说| 国产一区中文字幕| 国产调教视频一区| av亚洲产国偷v产偷v自拍| 最新日韩av在线| 在线观看免费亚洲| 三级在线观看一区二区 | 国产视频视频一区| 成人国产电影网| 国产精品久久国产精麻豆99网站 | 欧美成人精品福利| 国产精品77777竹菊影视小说| 国产日产欧美一区| 91麻豆精品在线观看| 亚洲亚洲精品在线观看| 欧美一级黄色录像| 国产成人综合在线播放| 日韩一区在线看| 欧美久久久久久久久久| 蜜臀久久久99精品久久久久久| 久久久久久夜精品精品免费| 成人性生交大片免费看中文网站| 亚洲三级小视频| 欧美精品在欧美一区二区少妇 | 91污片在线观看| 亚洲一区成人在线| 精品区一区二区| www.久久精品| 午夜成人免费电影| 久久久91精品国产一区二区精品 | 亚洲日本在线观看| 91精品国产色综合久久不卡蜜臀| 激情av综合网| 亚洲激情在线播放| 欧美精品一区二区在线观看| 99久久99久久综合| 热久久国产精品| 中文字幕一区三区| 日韩午夜av一区| 成人免费视频app| 奇米综合一区二区三区精品视频| 久久综合久久综合亚洲| 欧洲色大大久久| 国产美女久久久久| 亚洲制服丝袜在线| 国产色产综合产在线视频| 欧美日韩国产一二三| 成人手机电影网| 免费成人av在线| 亚洲黄色免费电影| 国产欧美一区二区精品久导航| 欧美日韩国产天堂| 成人午夜免费av| 毛片不卡一区二区| 亚洲一区免费视频| 中文字幕乱码久久午夜不卡| 欧美一区午夜视频在线观看| 91网站最新网址| 国产成人精品亚洲午夜麻豆| 日本欧美大码aⅴ在线播放|