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

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

?? bigint.cpp

?? RSA加密算法的實現 。它是第一個既能用于數據加密 也能用于數字簽名的算法。它易于理解和操作
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
			for(i=Z.m_nLength-1;i>=len;i--)
				Z.m_ulValue[i]=Z.m_ulValue[i-len];
			for(i=0;i<len;i++)
				Z.m_ulValue[i]=0;
		}
		X.Mov(X.Add(Z));
        Y.Mov(Y.Sub(A.Mul(Z)));
    }
    return X;
}

CBigInt CBigInt::Div(unsigned long A)
{
    CBigInt X; 
	X.Mov(*this);
   
    if(X.m_nLength==1)
	{
		X.m_ulValue[0]=X.m_ulValue[0]/A;
		return X;
	}
    unsigned __int64 div,mul;
    unsigned long carry=0;
    for(int i=X.m_nLength-1;i>=0;i--)
    {
        div=carry;
        div=(div<<32)+X.m_ulValue[i];
        X.m_ulValue[i]=(unsigned long)(div/A);
        mul=(div/A)*A;
        carry=(unsigned long)(div-mul);
    }
    if(X.m_ulValue[X.m_nLength-1]==0)
		X.m_nLength--;
    return X;
}

/****************************************************************************************
大數求模
調用形式:N.Mod(A)
返回值:N%A
思想:與大數除法相同的算法,只是返回的不是商而是余數
****************************************************************************************/
CBigInt CBigInt::Mod(CBigInt& A)
{
    CBigInt X,Y;
	unsigned __int64 div,num;
    unsigned long carry=0;
	unsigned i,len;
    X.Mov(*this);
    while(X.Cmp(A)>=0)
    {
		div=X.m_ulValue[X.m_nLength-1];
		num=A.m_ulValue[A.m_nLength-1];
		len=X.m_nLength-A.m_nLength;
		if((div==num)&&(len==0))
		{
			X.Mov(X.Sub(A));
			break;
		}
		if((div<=num)&&len)
		{
			len--;
			div=(div<<32)+X.m_ulValue[X.m_nLength-2];
		}
		div=div/(num+1);
		Y.Mov(div);
		Y.Mov(A.Mul(Y));
		if(len)
		{
			Y.m_nLength+=len;
			for(i=Y.m_nLength-1;i>=len;i--)Y.m_ulValue[i]=Y.m_ulValue[i-len];
			for(i=0;i<len;i++)Y.m_ulValue[i]=0;
		}
        X.Mov(X.Sub(Y));
    }
    return X;
}

unsigned long CBigInt::Mod(unsigned long A)
{
    if(m_nLength==1)return(m_ulValue[0]%A);
    unsigned __int64 div;
    unsigned long carry=0;
    for(int i=m_nLength-1;i>=0;i--)
    {
        div=m_ulValue[i];
		div+=carry*0x100000000;
        carry=(unsigned long)(div%A);
    }
    return carry;
}

/****************************************************************************************
從字符串按10進制或16進制格式輸入到大數
調用格式:N.Get(str,sys)
返回值:N被賦值為相應大數
sys暫時只能為10或16
****************************************************************************************/
void CBigInt::Get(CString& str, unsigned int system)
{
    int len=str.GetLength(),k;
    Mov(0);
    for(int i=0;i<len;i++)
    {
       Mov(Mul(system));
       if((str[i]>='0')&&(str[i]<='9'))k=str[i]-48;
       else if((str[i]>='A')&&(str[i]<='F'))k=str[i]-55;
       else if((str[i]>='a')&&(str[i]<='f'))k=str[i]-87;
       else k=0;
       Mov(Add(k));
	   
	   
    }
}

/****************************************************************************************
將大數按10進制或16進制格式輸出為字符串
調用格式:N.Put(str,sys)
返回值:無,參數str被賦值為N的sys進制字符串
sys暫時只能為10或16
****************************************************************************************/
void CBigInt::Put(CString& str, unsigned int system)
{
    if((m_nLength==1)&&(m_ulValue[0]==0)){str="0";return;}
	str="";
    CString t="0123456789ABCDEF";
    int a;
    char ch;
    CBigInt X;
    X.Mov(*this);
    while(X.m_ulValue[X.m_nLength-1]>0)
    {
        a=X.Mod(system);
        ch=t[a];
        str.Insert(0,ch);
        X.Mov(X.Div(system));
    }
}

/****************************************************************************************
求不定方程ax-by=1的最小整數解
調用方式:N.Euc(A)
返回值:X,滿足:NX mod A=1
****************************************************************************************/
CBigInt CBigInt::Euc(CBigInt& A)
{
	CBigInt M,E,X,Y,I,J;
    int x,y;
	M.Mov(A);
	E.Mov(*this);
	X.Mov(0);
	Y.Mov(1);
	x=y=1;
	while((E.m_nLength!=1)||(E.m_ulValue[0]!=0))
	{
		I.Mov(M.Div(E));
		J.Mov(M.Mod(E));
		M.Mov(E);
		E.Mov(J);
		J.Mov(Y);
		Y.Mov(Y.Mul(I));
		if(x==y)
		{
		    if(X.Cmp(Y)>=0)
				Y.Mov(X.Sub(Y));
			else
			{
				Y.Mov(Y.Sub(X));
				y=0;
			}
		}
		else
		{
			Y.Mov(X.Add(Y));
			x=1-x;
			y=1-y;
		}
		X.Mov(J);
	}
	if(x==0)
		X.Mov(A.Sub(X));
	return X;
}

/****************************************************************************************
求乘方的模
調用方式:N.RsaTrans(A,B)
返回值:X=N^A MOD B
****************************************************************************************/
CBigInt CBigInt::RsaTrans(CBigInt& A, CBigInt& B)
{
    CBigInt X,Y;
	int i,j,k;
	unsigned n;
	unsigned long num;
	k=A.m_nLength*32-32;
	num=A.m_ulValue[A.m_nLength-1];
	while(num){num=num>>1;k++;}
	X.Mov(*this);
	for(i=k-2;i>=0;i--)
	{
		Y.Mov(X.Mul(X.m_ulValue[X.m_nLength-1]));
		Y.Mov(Y.Mod(B));
        for(n=1;n<X.m_nLength;n++)
		{          
			for(j=Y.m_nLength;j>0;j--)Y.m_ulValue[j]=Y.m_ulValue[j-1];
			Y.m_ulValue[0]=0;
			Y.m_nLength++;
			Y.Mov(Y.Add(X.Mul(X.m_ulValue[X.m_nLength-n-1])));
			Y.Mov(Y.Mod(B));
		}
		X.Mov(Y);
		if((A.m_ulValue[i>>5]>>(i&31))&1)
		{
		    Y.Mov(Mul(X.m_ulValue[X.m_nLength-1]));
		    Y.Mov(Y.Mod(B));
            for(n=1;n<X.m_nLength;n++)
			{          
			    for(j=Y.m_nLength;j>0;j--)Y.m_ulValue[j]=Y.m_ulValue[j-1];
			    Y.m_ulValue[0]=0;
			    Y.m_nLength++;
			    Y.Mov(Y.Add(Mul(X.m_ulValue[X.m_nLength-n-1])));
			    Y.Mov(Y.Mod(B));
			}
		    X.Mov(Y);
		}
	}
    return X;
}

/****************************************************************************************
拉賓米勒算法測試素數
調用方式:N.Rab()
返回值:若N為素數,返回1,否則返回0
****************************************************************************************/
int CBigInt::Rab()
{
    unsigned i,j,pass;
    for(i=0;i<550;i++){if(Mod(PrimeTable[i])==0)return 0;}
    CBigInt S,A,I,K;
    K.Mov(*this);
	K.m_ulValue[0]--;
    for(i=0;i<5;i++)
    {
        pass=0;
        A.Mov(rand()*rand());
		S.Mov(K);
        while((S.m_ulValue[0]&1)==0)
		{
            for(j=0;j<S.m_nLength;j++)
			{
			    S.m_ulValue[j]=S.m_ulValue[j]>>1;
			    if(S.m_ulValue[j+1]&1)
					S.m_ulValue[j]=S.m_ulValue[j]|0x80000000;
			}
		    if(S.m_ulValue[S.m_nLength-1]==0)
				S.m_nLength--;
			I.Mov(A.RsaTrans(S,*this));
			if(I.Cmp(K)==0)
			{
				pass=1;
				break;
			}
		}
		if((I.m_nLength==1)&&(I.m_ulValue[0]==1))
			pass=1;
		if(pass==0)
			return 0;
	}
    return 1;
}

/****************************************************************************************
產生隨機素數
調用方法:N.GetPrime(bits)
返回值:N被賦值為一個bits位(0x100000000進制長度)的素數
****************************************************************************************/
void CBigInt::GetPrime(int bits)
{
    unsigned i;
    m_nLength=bits;
begin:
	for(i=0;i<m_nLength;i++)m_ulValue[i]=rand()*0x10000+rand();
    m_ulValue[0]=m_ulValue[0]|1;
	for(i=m_nLength-1;i>0;i--)
	{
		m_ulValue[i]=m_ulValue[i]<<1;
		if(m_ulValue[i-1]&0x80000000)m_ulValue[i]++;
	}
	m_ulValue[0]=m_ulValue[0]<<1;
	m_ulValue[0]++;
    for(i=0;i<550;i++){if(Mod(PrimeTable[i])==0)goto begin;}
    CBigInt S,A,I,K;
    K.Mov(*this);
	K.m_ulValue[0]--;
    for(i=0;i<5;i++)
	{
        A.Mov(rand()*rand());
	    S.Mov(K.Div(2));
	    I.Mov(A.RsaTrans(S,*this));
	    if(((I.m_nLength!=1)||(I.m_ulValue[0]!=1))&&(I.Cmp(K)!=0))goto begin;
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产在线精品不卡| 日韩国产欧美在线播放| 欧美一区二区三区视频| 成人av在线电影| 韩国成人在线视频| 亚洲国产精品一区二区www| 亚洲国产成人自拍| 久久亚洲二区三区| 精品国精品国产| 精品欧美一区二区在线观看| 欧美日韩高清在线| 91麻豆国产在线观看| 成人精品视频一区| 国产风韵犹存在线视精品| 久久er精品视频| 国产一区二区影院| 国模一区二区三区白浆| 国产一区在线不卡| 国产成人精品综合在线观看| 欧美电影一区二区| 日韩欧美国产综合一区| 久久先锋影音av| 亚洲国产精品av| 亚洲午夜精品久久久久久久久| 亚洲午夜av在线| 91亚洲男人天堂| 在线播放91灌醉迷j高跟美女 | 欧美少妇xxx| 在线一区二区三区四区五区| 色狠狠一区二区| 91精品国产91久久久久久一区二区| 欧美精品粉嫩高潮一区二区| 精品久久久久久亚洲综合网| 国产精品亲子伦对白| 亚洲欧美日韩中文播放| 日日摸夜夜添夜夜添精品视频| 极品瑜伽女神91| 在线看一区二区| 精品日韩在线观看| 亚洲欧美另类图片小说| 蜜桃视频在线一区| 99国产精品视频免费观看| 日韩一级二级三级精品视频| 国产精品少妇自拍| 免费国产亚洲视频| 欧美在线观看视频一区二区| 国产午夜亚洲精品午夜鲁丝片| 亚洲va欧美va人人爽| 91在线视频免费91| 精品国产一区二区三区av性色| 一区二区三区在线高清| 国产成人精品三级麻豆| 制服丝袜中文字幕一区| 亚洲精品国产品国语在线app| 日韩二区在线观看| 欧美日韩精品一区二区三区四区| 久久久久久久久99精品| 欧美aⅴ一区二区三区视频| 欧洲av一区二区嗯嗯嗯啊| 久久精品夜色噜噜亚洲a∨| 久久精品久久99精品久久| 欧美中文一区二区三区| 亚洲免费在线电影| 99r精品视频| 最新中文字幕一区二区三区 | 久久成人麻豆午夜电影| 日韩精品中文字幕一区二区三区 | 国产美女视频一区| 久久久国产一区二区三区四区小说| 日韩在线播放一区二区| 欧美美女视频在线观看| 午夜激情久久久| 欧美一区在线视频| 精品午夜久久福利影院| 欧美精品一区二区三区高清aⅴ | 懂色av一区二区在线播放| 日韩一卡二卡三卡四卡| 久久99精品久久久久婷婷| 在线成人av影院| 蜜桃精品视频在线观看| 欧美草草影院在线视频| 国内精品不卡在线| 日韩国产欧美视频| 国产日韩精品视频一区| 欧美午夜一区二区| 国产999精品久久久久久绿帽| 国产精品久久久久久久久果冻传媒| 色菇凉天天综合网| 国产精品主播直播| 亚洲综合色噜噜狠狠| 久久综合久久综合久久综合| 色综合久久久久综合体| 黑人巨大精品欧美一区| 欧美大片一区二区| 国产成人精品一区二| 国产激情91久久精品导航| 日本成人中文字幕在线视频| 中文字幕一区三区| 国产亚洲人成网站| 日韩欧美激情四射| 欧美性猛片xxxx免费看久爱| 成人亚洲精品久久久久软件| 麻豆一区二区三| 亚洲v日本v欧美v久久精品| 亚洲精品日韩专区silk| 日韩一级黄色大片| 欧美精品aⅴ在线视频| av动漫一区二区| 成人福利视频在线| 国产福利一区二区三区视频在线 | 亚洲一区二区欧美激情| 国产精品国产三级国产普通话99 | 欧美日韩在线观看一区二区| 欧美亚洲免费在线一区| 欧美日韩国产系列| 91亚洲精品久久久蜜桃网站 | 欧美国产1区2区| 26uuu欧美日本| 精品国产第一区二区三区观看体验 | 久久久99久久| 国产日韩欧美电影| 久久久99免费| 国产日韩欧美在线一区| 久久九九99视频| 久久精品欧美一区二区三区麻豆| 91精品国产免费| 精品久久人人做人人爱| 久久综合九色综合97婷婷女人 | 色综合久久中文综合久久97| 欧美在线制服丝袜| 欧美日韩电影在线| 欧美一区二区观看视频| 久久久久亚洲综合| 国产精品嫩草影院com| 亚洲男同1069视频| 日韩精品五月天| 成人性生交大片| 欧美日韩午夜在线| 久久久精品黄色| 亚洲狠狠爱一区二区三区| 久久99精品久久久久久动态图 | 亚洲免费av高清| 蜜臀av一级做a爰片久久| 国产suv精品一区二区三区| 在线免费观看一区| 久久久精品国产免费观看同学| 国产精品久久久久久久久免费桃花 | 亚洲国产精品一区二区www在线| 精品一区二区三区蜜桃| 欧美午夜寂寞影院| 国产嫩草影院久久久久| 日韩高清在线不卡| 91麻豆精品视频| 日本一区二区在线不卡| 日本最新不卡在线| 91久久精品网| 国产精品免费久久| 国产精品综合一区二区三区| 欧美日韩精品是欧美日韩精品| 久久精品亚洲麻豆av一区二区| 日韩激情在线观看| 欧美高清www午色夜在线视频| 亚洲精品国产无天堂网2021| 粉嫩一区二区三区性色av| 2023国产精华国产精品| 日本中文字幕一区二区视频| 91精品福利视频| 亚洲美女视频在线观看| 99视频热这里只有精品免费| 国产人久久人人人人爽| 国产91丝袜在线播放| 国产女人18水真多18精品一级做| 激情综合网最新| 亚洲国产精品v| 一本一本久久a久久精品综合麻豆| 亚洲欧美日韩一区二区| 欧美在线观看你懂的| 日韩高清一区二区| 久久欧美一区二区| 97se亚洲国产综合自在线| 最新不卡av在线| 欧美性猛交xxxx乱大交退制版| 亚洲成人精品在线观看| 精品久久久久久久久久久久久久久| 久久精品噜噜噜成人av农村| 国产日本欧洲亚洲| 91传媒视频在线播放| 免费一级片91| 国产精品美女久久久久久久久| 91视频在线看| 日韩成人一区二区| 久久综合国产精品| 99r国产精品| 久热成人在线视频| 国产精品丝袜91| 日韩一区二区三区精品视频| 丁香婷婷深情五月亚洲| 亚洲成人777| 国产精品你懂的| 久久免费偷拍视频|