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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? ecdsa.cpp

?? 橢圓曲線簽名算法
?? CPP
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
				TempNum=TempNum-10;
				rest2=1;
			}
			else
				rest2=0;
			result.AddHead(char(TempNum));
			tempa=tempa->Prev;
		}
		if(rest2)
			result.AddHead(char(rest2));
		if(temp.Head!=NULL)
		{
			temp.End=temp.Head;
			temp.Head=NULL;
		}
		tempb=NULL;
	}
	AdjustBigNum(result);
	if (!flag)
	{
		result.Head->Num=char(int(result.Head->Num)*(-1));
	}
	
	return result;
}
/************************************************************************/
/* 將除法轉(zhuǎn)化為減法來(lái)處理,基本思想如下:
						div=0;
						while(a>=0)
						{
							a-=b;
							div++;
						}
						div--;	
這種方式直接處理效率很低,后來(lái)改進(jìn)為得到商的各位數(shù)字,將除數(shù)擴(kuò)大處理,
速度提高了很多,現(xiàn)在可以對(duì)整數(shù)的整除均可以進(jìn)行
																		*/
/************************************************************************/
BigInteger BigInteger::operator / (BigInteger BigNum2)//對(duì)/號(hào)進(jìn)行重載
{
	BigInteger BigNum1,result(0);
	bool flag=true;
	BigNum1=*this;
	if (int(BigNum1.Head->Num)*int(BigNum2.Head->Num)<0) 
	{
		flag=false;
	}
	if (int(BigNum1.Head->Num)<0)
	{
		BigNum1.Head->Num=char(int(BigNum1.Head->Num)*(-1));
	}
	if (int(BigNum2.Head->Num)<0)
	{
		BigNum2.Head->Num=char(int(BigNum2.Head->Num)*(-1));
	}

	int cmp=Compare(BigNum1,BigNum2);
	if (cmp==-1)
	{
		result.AddEnd(0);
	}
	else if (cmp==0)
	{
		result.AddEnd(1);
	}
	else
	{
		int n,t,i=0,k,sub;//BigNum1,BigNum2的長(zhǎng)度
		Node *p1=BigNum1.Head;
		Node *p2=BigNum2.Head;
		while (p1)
		{
			n++;
			p1=p1->Next;
		}
		while (p2)
		{
			t++;
			p2=p2->Next;
		}
		sub=n-t;
		BigInteger Bm1,Bm2=BigNum2;
		BigInteger temp0(0),temp1(1),expand,temp2,temp3,temp;
		/************************************************************************/
		/* 對(duì)此情形的整除采用每步獲取商的各位數(shù)字的形式得到,余數(shù)小于0時(shí)退出    */
		/************************************************************************/
		while((!(Compare(BigNum1,Bm2)==-1)))
		{
			Bm1=BigNum1;//保存每步的被除數(shù)
			expand=temp1;
			n=t=0;
			p1=BigNum1.Head;
			p2=BigNum2.Head;
			while (p1)
			{
				n++;
				p1=p1->Next;
			}
			while (p2)
			{
				t++;
				p2=p2->Next;
			}
			temp2=Transform(10); 
			temp3=Transform(n-t-1);
			//先將除數(shù)擴(kuò)大10^(n-t-1)倍,商再擴(kuò)大這么多倍即可得到除數(shù)的最高位后添0的數(shù)值
			if (n-t-1>0) 
			{ 
				expand=temp2^temp3;
				BigNum2=BigNum2*expand;
			}
			k=0;
			while(int(BigNum1.Head->Num)>=0)
			{
				BigNum1=BigNum1-BigNum2;
				k++;
			}
			k--;
			temp=expand*Transform(k);
			result=result+temp;
			BigNum1=Bm1-BigNum2*Transform(k);//每步的余數(shù)代替被除數(shù)
			BigNum2=Bm2;//恢復(fù)除數(shù)
		}
	}
	AdjustBigNum(result);	
	if (!flag)
	{
		result.Head->Num=char(int(result.Head->Num)*(-1));
	}
	return result;	
}

BigInteger BigInteger::operator % (BigInteger BigNum2)//對(duì)%號(hào)進(jìn)行重載
{
	BigInteger BigNum1,temp,temp1(-1),result;
	BigNum1=*this;
	//為負(fù)則化為正處理,'+'只能對(duì)兩個(gè)正整數(shù)有效
	while (int(BigNum1.Head->Num)<0)
	{
		BigNum1=BigNum1*temp1;//轉(zhuǎn)正
		BigNum1=BigNum2-BigNum1;
	}	
	temp=BigNum1/BigNum2;
	result=BigNum1-(temp*BigNum2);
	AdjustBigNum(result);
	return result;	
}
/************************************************************************/
/*底數(shù)和指數(shù)都是正數(shù),可以按模重復(fù)平方法的思路計(jì)算,只是計(jì)算過(guò)程中不用取余*/
/************************************************************************/
BigInteger BigInteger::operator ^ (BigInteger BigNum2)
{
	int count=0;
	BigInteger result(1),temp,temp2(2);
	BigInteger &BigNum1=*this;
	int b[200];
	//將BigNum2轉(zhuǎn)換為二進(jìn)制
	while(int(BigNum2.Head->Num))
	{
		temp=BigNum2%temp2;
		b[count++]=int(temp.Head->Num);
		BigNum2=BigNum2/temp2;
	}
	//按模重復(fù)平方法計(jì)算
	for(int i=count-1;i>=0;i--)
	{
		result=result*result;
		if(b[i])
			result=result*BigNum1;
	}
	return result;
}

BigInteger BigInteger::operator = (BigInteger BigNum)//對(duì)=號(hào)進(jìn)行重載
{
	if(this==&BigNum)
		return *this;
	this->~BigInteger();
	Node *p;
	TempNode=Head=End=NULL;
	p=BigNum.Head;
	while(p)
	{
		AddEnd(p->Num);
		p=p->Next;
	}
	return *this;
}

CString disp(BigInteger BigNum)//輸出鏈表
{
	CString str;
	char s[2]={'\0','\0'};
	Node *p=BigNum.Head;
	while(p)
	{
		str+=itoa(int(p->Num),s,10);
		p=p->Next;
	}
	str+="\r\n";
	return str;
}
//a mod n 的逆,存在則返回逆,否則返回0
BigInteger Inv(BigInteger a,BigInteger n)
{
	BigInteger b1(0),b2(1),d1(n),d2(a%n),temp,temp0(0);
	if (int(a.Head->Num)<0)
	{
		a=a+n;
	}
	while (int(d2.Head->Num))
	{
		temp=b2;
		b2=b1-(b2*(d1/d2));	 
		b1=temp;
		temp=d2;
		d2=d1-((d1/d2)*d2);
		d1=temp;
	}
	while (int(b1.Head->Num)<0)
	{
		b1.Head->Num=char(int(b1.Head->Num)*(-1));
		b1=n-b1;
	}
	if (d1.Head==d1.End&&int(d1.Head->Num==1))
	{
		return b1%n;
	}
	else
		return temp0;
	
}
//大整數(shù)的比較:a>b則返回1,相等返回0,a<b返回-1,只針對(duì)非負(fù)整數(shù)
int Compare(BigInteger BigNum1,BigInteger BigNum2)
{
	int result=0;//初始化為相等
	Node *temp1,*temp2;
	temp1=BigNum1.End;
	temp2=BigNum2.End;
	while (temp1&&temp2)
	{
		if (int(temp1->Num)>int(temp2->Num))
		{
			result=1;
		}
		if (int(temp1->Num)<int(temp2->Num))
		{
			result=-1;
		}
		temp1=temp1->Prev;
		temp2=temp2->Prev; 
	}
	if (temp1)
	{
		result=1;
	}
	if (temp2)
	{
		result=-1;
	}
	return result;
}
//如果BigNum==0返回1,否則返回0
int Compare(BigInteger BigNum)
{
	if (int(BigNum.Head->Num))
	{
		return 0;
	}
	else
		return 1;
}
//隨機(jī)產(chǎn)生一個(gè)n位的大整數(shù)
BigInteger Rand(int n)
{
	BigInteger result,temp1(1);
	int number;
	srand(unsigned(GetTickCount()+seed));	
	number=rand();//隨機(jī)產(chǎn)生種子
	seed=number;
	srand(number);//用種子初始化隨機(jī)發(fā)生器
	number=1+rand()%9;//產(chǎn)生1-9的數(shù)字作為第一位
	result.AddEnd(char(number));
	n--;
	while (n)
	{
		number=rand();
		srand(number+seed);
		number=rand()%10;
		result.AddEnd(char(number));
		n--;
	}
	seed=seed/2;
	//調(diào)整使最后一位為奇數(shù),利于后面產(chǎn)生素?cái)?shù)
	if(int(result.End->Num)%2==0)
		result=result+temp1;

	return result;
}
/************************************************************************/
/*     隨機(jī)產(chǎn)生大整數(shù)Bignum以內(nèi)的大整數(shù),即0--BigNum-1之間
		方法: 隨機(jī)生成一個(gè)相同位數(shù)的大整數(shù),再求模                       */
/************************************************************************/
BigInteger Rand(BigInteger BigNum)
{
	Node *p=BigNum.Head;
	BigInteger result;
	int length=0;//BigNum的位數(shù)
	int num;
	while (p)
	{
		length++;
		p=p->Next;
	}
	srand(unsigned(GetTickCount()));	
	randmize=rand()%1500;//隨機(jī)產(chǎn)生種子
	srand(randmize);
	for(int i=1;i<=length;i++)
	{
		srand(randmize);//用種子初始化隨機(jī)發(fā)生器
		randmize+=rand()%197;//保證種子不同
		num=rand()%10;
		result.AddEnd(num);
	}
	AdjustBigNum(result);
	result=result%BigNum;
	return result;
}
//將long型變量轉(zhuǎn)化為大整數(shù)BigInteger型
BigInteger Transform(long n)
{
	BigInteger result;
	int temp;
	bool flag;
	if (n<0)
	{
		flag=false;
		n=-n;
	}
	while(n)
	{
		temp=n%10;//從個(gè)位開(kāi)始依次取各位的數(shù)字
		result.AddHead(char(temp));
		n=n/10;
	}
	if (!flag) 
	{
		result.Head->Num=char(int(result.Head->Num)*(-1));//n為負(fù)數(shù)則轉(zhuǎn)化為負(fù)的大整數(shù)
	}
	return result;
}


//大整數(shù)a^m%n運(yùn)算,用模重復(fù)平方法求解
BigInteger Calculate_exp(BigInteger a,BigInteger m,BigInteger n)
{
	int i;
	int count=0;
	BigInteger d(1),temp,temp2(2);
	int b[400];
	//計(jì)算m轉(zhuǎn)換為二進(jìn)制
	while(int(m.Head->Num))
	{
		temp=m%temp2;
		b[count++]=int(temp.Head->Num);
		m=m/temp2;
	}
	//按模重復(fù)平方法計(jì)算
	for(i=count-1;i>=0;i--)
	{
		d=d*d%n;
		if(b[i])
			d=d*(a%n)%n;
	}
	return d;
}
/************************************************************************/
/*素性檢驗(yàn)之前的篩選,即除以100以內(nèi)的小素?cái)?shù)								*/
/************************************************************************/
bool Select(BigInteger BigNum,int n)
{
	int a[]={3,5,7,11,13,17,19,23,29,31,34,37,41,43,47,51,57,59,61,67,71,73,79,83,89,91,97};
	if (int(BigNum.End->Num)%2==0) 
	{
		return false;
	}
	int i=0;
	BigInteger temp;
	while (i<27&&i<n) 
	{
		temp=Transform(a[i++]);
		if (Compare(BigNum%temp)) 
		{
			return false;
		}
	}
	return true;
}
/************************************************************************/
/* Rabin_Miller素性檢驗(yàn)													*/
/************************************************************************/
bool M_Rabin(BigInteger n,int k)
{
	BigInteger t,b,r;
	long s=0,i=3;
	BigInteger nn,temp,temp0(0),temp1(1),temp2(2);
	nn=n-temp1;
	t=n-temp1;
	if (Compare(n,temp2)==0||Compare(n,temp1+temp2)==0) 
	{
		return true;
	}
	if (Compare(n,temp1)==0||Compare(n,temp2+temp2)==0)
	{
		return false;
	}
	temp=nn%temp2;
	while (Compare(temp))
	{
		t=nn/temp2;
		nn=nn/temp2;
		s++;
		temp=nn%temp2;
	}
	nn=n-temp1;
	while (k)
	{
		b=temp2+Rand(n-temp2-temp2);//隨機(jī)選取2<=b<=n-2
		r=Calculate_exp(b,t,n);
		if (Compare(r,temp1)&&Compare(r,nn))
		{
			r=Calculate_exp(r,temp2,n);
			i++;
			while (Compare(r,nn)&&i<s+2) 
			{
				r=Calculate_exp(r,temp2,n);
				i++;
			}
			if (Compare(r,nn))
			{
				return false;
			}
		}
		i=3;
		k--;
	}
	return true;
}
//生成m位的偽隨機(jī)大素?cái)?shù)
BigInteger Produce_Prime(int m)
{
	BigInteger result=Rand(m),temp2(2);
	while (1)
	{
		if (!Select(result,2*m)) 
		{
			result=result+temp2;
		}
		else
		{
			if (!M_Rabin(result,5))
			{
				result=result+temp2;
			}
			else
				return result;
		}
	}	
}
//將一串?dāng)?shù)字轉(zhuǎn)化為大整數(shù)
BigInteger CStringToBignum(CString sub)
{
	int length=sub.GetLength();
	BigInteger result;
	TCHAR c;
	int num;
	for(int i=0;i<length;i++)
	{
		c=sub[i];
		num=c-'0';
		result.AddEnd(num);
	}
	return result;
}
/////////////////////////////////////////////////////////////////////////////
// CECDSAApp message handlers

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩av中文在线观看| 中文字幕一区二区三区视频| 91性感美女视频| av中文字幕在线不卡| 成人三级在线视频| 91碰在线视频| 色婷婷久久综合| 精品视频在线看| 91.com在线观看| 日韩一级黄色大片| www一区二区| 成人欧美一区二区三区在线播放| 欧美激情中文字幕| 亚洲视频网在线直播| 亚洲免费观看高清完整版在线观看 | 日韩激情一二三区| 奇米色一区二区三区四区| 久久99国产精品免费| 国产东北露脸精品视频| 9久草视频在线视频精品| 91麻豆国产自产在线观看| 欧美天堂亚洲电影院在线播放| 欧美老肥妇做.爰bbww| 精品精品国产高清一毛片一天堂| 国产欧美久久久精品影院| 美国十次综合导航| 欧美bbbbb| 成人avav影音| 欧美专区日韩专区| 精品国产乱码久久久久久闺蜜| 日本一区二区综合亚洲| 一区二区三区国产精华| 久久国产乱子精品免费女| 不卡视频在线观看| 91精品国产高清一区二区三区蜜臀 | 视频一区视频二区中文| 国产精品亚洲成人| 欧美日韩视频专区在线播放| 久久久久国产一区二区三区四区 | 色婷婷综合久久久中文字幕| 91精品国产综合久久精品麻豆| 2023国产精华国产精品| 亚洲自拍与偷拍| 国产成人午夜精品5599 | 国产一区美女在线| 91黄视频在线观看| 中文字幕二三区不卡| 蜜臀av一区二区在线免费观看| 99精品视频中文字幕| 欧美刺激午夜性久久久久久久| 亚洲欧洲成人自拍| 国产寡妇亲子伦一区二区| 91精品国产高清一区二区三区蜜臀 | 久久99热狠狠色一区二区| 色视频一区二区| 欧美激情一二三区| 精品一区二区三区蜜桃| 欧美日韩国产精品自在自线| 自拍偷拍国产亚洲| 成人久久18免费网站麻豆| 精品国内片67194| 久久精品国产999大香线蕉| 欧美人体做爰大胆视频| 亚洲福利国产精品| 欧美日韩一卡二卡| 一区二区三区.www| 在线看日本不卡| 夜夜操天天操亚洲| 欧美性高清videossexo| 亚洲一区中文在线| 欧美影院精品一区| 亚洲一区在线观看免费| 色综合网站在线| 一区二区三区精品| 欧美日韩在线播放三区| 午夜电影网亚洲视频| 欧美日韩成人综合在线一区二区| 亚洲一区视频在线| 欧美日韩1区2区| 日韩av在线免费观看不卡| 欧美精品黑人性xxxx| 日韩精品一卡二卡三卡四卡无卡| 欧美久久久一区| 美日韩一区二区三区| 欧美变态tickling挠脚心| 国产曰批免费观看久久久| 久久综合色一综合色88| 国产+成+人+亚洲欧洲自线| 国产精品久久久99| 欧美午夜一区二区三区免费大片| 亚洲午夜电影在线| 精品日韩一区二区三区| 国产激情视频一区二区三区欧美| 欧美国产日韩亚洲一区| 91丝袜国产在线播放| 亚洲va韩国va欧美va| 欧美一区二区三区视频免费播放| 久久er99精品| 亚洲男同1069视频| 日韩欧美一二三四区| 国产成人免费网站| 一区2区3区在线看| 精品国产一区二区三区四区四| 国内久久婷婷综合| 成人免费在线播放视频| 91精品在线免费| 岛国av在线一区| 天堂av在线一区| 国产农村妇女毛片精品久久麻豆| 在线观看网站黄不卡| 久久精品国产精品青草| 亚洲美女视频在线观看| 日韩欧美第一区| 成人黄色av电影| 天涯成人国产亚洲精品一区av| 久久婷婷久久一区二区三区| 色综合天天综合网国产成人综合天| 日本少妇一区二区| 国产精品福利一区| 日韩欧美一区二区免费| 99久久精品国产毛片| 国产综合久久久久久久久久久久| 亚洲人成影院在线观看| 欧美mv和日韩mv国产网站| 91浏览器在线视频| 国产高清久久久| 日本网站在线观看一区二区三区| 国产精品久久一卡二卡| 欧美电影精品一区二区 | 亚洲国产一区二区在线播放| 国产日韩欧美精品电影三级在线| 欧美日韩一区二区在线视频| 成人午夜碰碰视频| 捆绑紧缚一区二区三区视频| 一区二区视频免费在线观看| 久久嫩草精品久久久精品一| 欧美精品乱码久久久久久| 色哟哟亚洲精品| 成人午夜视频网站| 国产盗摄一区二区| 国产在线麻豆精品观看| 日韩电影免费一区| 亚洲成人自拍一区| 亚洲精品成人少妇| 亚洲人成精品久久久久久| 欧美国产欧美综合| 国产精品美女久久久久久久久久久| 日韩亚洲欧美在线观看| 欧美嫩在线观看| 欧美色老头old∨ideo| 色综合久久66| 在线国产电影不卡| 欧洲精品在线观看| 在线观看三级视频欧美| 在线观看日韩一区| 欧美色手机在线观看| 欧美午夜视频网站| 欧美日韩精品专区| 欧美挠脚心视频网站| 91精品国产色综合久久不卡电影| 欧美日韩黄色影视| 日韩免费视频线观看| 日韩一卡二卡三卡四卡| 精品国产伦理网| 国产精品视频一二三区| 亚洲丝袜美腿综合| 天堂资源在线中文精品| 五月婷婷欧美视频| 精品午夜久久福利影院| 国产呦精品一区二区三区网站| 看电影不卡的网站| 国产盗摄女厕一区二区三区| 国产v日产∨综合v精品视频| 成人精品在线视频观看| 色中色一区二区| 欧美精品 日韩| 久久午夜老司机| 1024国产精品| 奇米影视一区二区三区| 国产精品自拍三区| 色婷婷综合久久久| 欧美一级黄色片| 国产日本欧美一区二区| 亚洲最新视频在线观看| 久久精品国产免费| 99国产精品久久久久久久久久| 欧美日韩精品一区二区三区蜜桃| 欧美成人精精品一区二区频| 亚洲欧洲精品一区二区精品久久久| 亚洲18色成人| 国产a精品视频| 欧美一三区三区四区免费在线看| 欧美高清在线一区| 爽好久久久欧美精品| caoporm超碰国产精品| 日韩欧美国产一区二区在线播放| 中文字幕av一区二区三区| 午夜国产不卡在线观看视频| 福利视频网站一区二区三区| 欧美在线高清视频|