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

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

?? eccdlg.cpp

?? 非對稱密碼系統,包含RSA,ECC,大數乘法。
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
// EccDlg.cpp : implementation file
//

#include "stdafx.h"
#include "ASYMMETRIC KEY CRYPTOSYSTEM.h"
#include "EccDlg.h"
#include "string.h"
#include "iostream.h"
#include "tommath.h"
#include "ECC.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

#define BIT_LEN 800 
#define KEY_LONG 128  //私鑰比特長
#define P_LONG 200    //有限域P比特長
#define EN_LONG 40    //一次取明文字節數(x,20)(y,20)

mp_int GX;
	mp_int GY;
	mp_int K;//私有密鑰
	mp_int A;
	mp_int B;
	mp_int QX;
	mp_int QY;
	mp_int P;//Fp中的p(有限域P)
//得到lon比特長素數
int GetPrime(mp_int *m,int lon);
//得到B和G點X坐標G點Y坐標
void Get_B_X_Y(mp_int *x1,mp_int *y1,mp_int *b,  mp_int *a,  mp_int *p);
//點乘
bool Ecc_points_mul(mp_int *qx,mp_int *qy, mp_int *px, mp_int *py,mp_int *d,mp_int *a,mp_int *p);
//點加
int Two_points_add(mp_int *x1,mp_int *y1,mp_int *x2,mp_int *y2,mp_int *x3,mp_int *y3,mp_int *a,bool zero,mp_int *p);
//二進制存儲密文
int chmistore(mp_int *a,FILE *fp);
//把讀取的字符存入mp_int型數
int putin(mp_int *a,char *ch,int chlong);
//ECC加密
void Ecc_encipher(mp_int *qx,mp_int *qy, mp_int *px, mp_int *py,mp_int *a,mp_int *p,CString,CString);
//ECC解密
void Ecc_decipher(mp_int *k, mp_int *a,mp_int *p,CString,CString);
//實現將mp_int數a中的比特串還原為字符串并賦給字符串ch:
int chdraw(mp_int *a,char *ch);
//取密文
int miwendraw(mp_int *a,char *ch,int chlong);


int myrng(unsigned char *dst, int len, void *dat)
{
   int x;
   for (x = 0; x < len; x++) dst[x] = rand() & 0xFF;
   return len;
}
int GetPrime(mp_int *m,int lon){
   mp_prime_random_ex(m, 10, lon, 
		(rand()&1)?LTM_PRIME_2MSB_OFF:LTM_PRIME_2MSB_ON, myrng, NULL);
   return MP_OKAY;
}

void Get_B_X_Y(mp_int *x1,mp_int *y1,mp_int *b, mp_int *a, mp_int *p)
{
    mp_int tempx,tempy;
    mp_int temp;
	mp_int compare;
	mp_int temp1;
	mp_int temp2;
	mp_int temp3;
	mp_int temp4;
	mp_int temp5;
	mp_int temp6;
	mp_int temp7;
	mp_int temp8;
    
	mp_init_set_int (&compare, 0);
	mp_init(&tempx);
	mp_init(&tempy);
	mp_init(&temp);
    mp_init(&temp1);
	mp_init(&temp2);
	mp_init(&temp3);
	mp_init(&temp4);
	mp_init(&temp5);
	mp_init(&temp6);
	mp_init(&temp7);
	mp_init(&temp8);

 
   while(1)
   {
     
	 //4a3+27b2≠0 (mod p)
     GetPrime(b,40);
	 mp_expt_d(a, 3, &temp1);
     mp_sqr(b, &temp2);
	 mp_mul_d(&temp1, 4, &temp3);
	 mp_mul_d(&temp2, 27, &temp4);
     mp_add(&temp3, &temp4, &temp5);
	 mp_mod(&temp5,p,&temp);

     if(mp_cmp(&temp, &compare)!=0 )
	 {
		 break;
	 }
   }

   //y2=x3+ax+b,隨機產生X坐標,根據X坐標計算Y坐標
   GetPrime(x1,30);
   mp_expt_d(x1, 3, &temp6);
   mp_mul(a, x1, &temp7);
   mp_add(&temp6, &temp7, &temp8);
   mp_add(&temp8, b, &tempx);
   mp_sqrt(&tempx, y1);



   mp_clear(&tempx);
   mp_clear(&tempy);
   mp_clear(&temp);
   mp_clear(&temp1);
   mp_clear(&temp2);
   mp_clear(&temp3);
   mp_clear(&temp4);
   mp_clear(&temp5);
   mp_clear(&temp6);
   mp_clear(&temp7);
   mp_clear(&temp8);


}

bool Ecc_points_mul(mp_int *qx,mp_int *qy, mp_int *px, mp_int *py,mp_int *d,mp_int *a,mp_int *p)
{
mp_int X1, Y1;
mp_int X2, Y2;
mp_int X3, Y3;
mp_int XX1, YY1;
mp_int A,P;

int i;
bool zero=false;
char Bt_array[800]={0};
char cm='1';

    mp_toradix(d,Bt_array,2); 

    mp_init_set_int(&X3, 0);
    mp_init_set_int(&Y3, 0);
	mp_init_copy(&X1, px);
	mp_init_copy(&X2, px);
    mp_init_copy(&XX1, px);
	mp_init_copy(&Y1, py);
	mp_init_copy(&Y2, py);
	mp_init_copy(&YY1, py);

	mp_init_copy(&A, a);
	mp_init_copy(&P, p);

	for(i=1;i<=KEY_LONG-1;i++)
	{
	   mp_copy(&X2, &X1);
	   mp_copy(&Y2, &Y1);
	   Two_points_add(&X1,&Y1,&X2,&Y2,&X3,&Y3,&A,zero,&P);  
       mp_copy(&X3, &X2);
	   mp_copy(&Y3, &Y2);
	   if(Bt_array[i]==cm)
	   {
		  
		   mp_copy(&XX1, &X1);
		   mp_copy(&YY1, &Y1);
		   Two_points_add(&X1,&Y1,&X2,&Y2,&X3,&Y3,&A,zero,&P);
		   mp_copy(&X3, &X2);
		   mp_copy(&Y3, &Y2);

	   }

	}
		
   if(zero)
   {
	   cout<<"It is Zero_Unit!";
       return false;//如果Q為零從新產生D
   }

   mp_copy(&X3, qx);
   mp_copy(&Y3, qy);

   mp_clear(&X1);
   mp_clear(&Y1);
   mp_clear(&X2);
   mp_clear(&Y2);
   mp_clear(&X3);
   mp_clear(&Y3);
   mp_clear(&XX1);
   mp_clear(&YY1);
   mp_clear(&A);
   mp_clear(&P);
  
   return true;
}

//兩點加
int Two_points_add(mp_int *x1,mp_int *y1,mp_int *x2,mp_int *y2,mp_int *x3,mp_int *y3,mp_int *a,bool zero,mp_int *p)
{
mp_int x2x1;
mp_int y2y1;
mp_int tempk;
mp_int tempy;
mp_int tempzero;
mp_int k;
mp_int temp1;
mp_int temp2;
mp_int temp3;
mp_int temp4;
mp_int temp5;
mp_int temp6;
mp_int temp7;
mp_int temp8;
mp_int temp9;
mp_int temp10;


mp_init(&x2x1);
mp_init(&y2y1);
mp_init(&tempk);
mp_init(&tempy);
mp_init(&tempzero);
mp_init(&k);
mp_init(&temp1);
mp_init(&temp2);
mp_init_set(&temp3,2);
mp_init(&temp4);
mp_init(&temp5);
mp_init(&temp6);
mp_init(&temp7);
mp_init(&temp8);
mp_init(&temp9);
mp_init(&temp10);


   if(zero)
   {
	  mp_copy(x1, x3);
      mp_copy(y1, y3);
	  zero=false;
	  goto L;
   }
   mp_zero(&tempzero);
   mp_sub(x2, x1, &x2x1);
   if(mp_cmp(&x2x1,&tempzero)==-1)
   {
	  
	  mp_add(&x2x1, p, &temp1);
	  mp_zero(&x2x1);
      mp_copy(&temp1, &x2x1);
   }
   mp_sub(y2, y1, &y2y1);
   if(mp_cmp(&y2y1,&tempzero)==-1)
   {
     
	  mp_add(&y2y1, p, &temp2);
	  mp_zero(&y2y1);
      mp_copy(&temp2, &y2y1);
   }
   if(mp_cmp(&x2x1, &tempzero)!=0)
   {
	   
	   mp_invmod(&x2x1,p,&tempk);
	   
	   mp_mulmod(&y2y1, &tempk, p, &k);
   }
   else
   {
	   if(mp_cmp(&y2y1, &tempzero)==0)
	   {
		  
		  mp_mulmod(&temp3,y1,p,&tempy);
          mp_invmod(&tempy,p,&tempk);
          mp_sqr(x1, &temp4);     
		  mp_mul_d(&temp4, 3, &temp5);
		  mp_add(&temp5, a, &temp6);
          mp_mulmod(&temp6, &tempk, p, &k);
		  
	   }
	   else
	   {
		  zero=true;
		  goto L;
	   }
   }  
 
   mp_sqr(&k, &temp7);
   mp_sub(&temp7, x1, &temp8);
   mp_submod(&temp8, x2, p, x3);
 
   mp_sub(x1, x3, &temp9);
   mp_mul(&temp9, &k, &temp10);
   mp_submod(&temp10, y1, p, y3);


L:

   mp_clear(&x2x1);
   mp_clear(&y2y1);
   mp_clear(&tempk);
   mp_clear(&tempy);
   mp_clear(&tempzero);
   mp_clear(&k);
   mp_clear(&temp1);
   mp_clear(&temp2);
   mp_clear(&temp3);
   mp_clear(&temp4);
   mp_clear(&temp5);
   mp_clear(&temp6);
   mp_clear(&temp7);
   mp_clear(&temp8);
   mp_clear(&temp9);
   mp_clear(&temp10);

   return 1;

}

//二進制存儲密文
int chmistore(mp_int *a,FILE *fp)
{

   int i,j;
   char ch;
   char chtem[4];

   mp_digit yy=(mp_digit)255;
   for (i=0; i <= a->used - 1;  i++) { 

      chtem[3]=(char)(a->dp[i] & yy);     
      chtem[2]=(char)((a->dp[i] >> (mp_digit)8) & yy);	    
	  chtem[1]=(char)((a->dp[i] >> (mp_digit)16) & yy);    
      chtem[0]=(char)((a->dp[i] >> (mp_digit)24) & yy);

      for(j=0;j<4;j++)
	  {
	      fprintf(fp,"%c",chtem[j]);
	  }
      
  }  

  ch=char(255);
  fprintf(fp, "%c", ch);
  return MP_OKAY;
}


//把讀取的字符存入mp_int型數
int putin(mp_int *a,char *ch,int chlong)
{
	mp_digit *temp,yy;
	int i,j,res;
	if(a->alloc<chlong*2/7+2)
	{
		if((res=mp_grow(a,chlong*2/7+2))!=MP_OKAY)
			return res;
	}
    
	a->sign=0;
	mp_zero(a);
	temp=a->dp;
	i=0;
	yy=(mp_digit)15;

	if(chlong<4)
	{
            for(j=chlong-1;j>=0;j--)
			{
			   *temp |= (mp_digit)(ch[j] & 255);
               *temp <<= (mp_digit)CHAR_BIT;
			}
			*temp >>= (mp_digit)8;
			a->used=1;
			return MP_OKAY;
	}

	if(chlong<7)
	{
	        i+=4;
            *++temp |= (mp_digit)(ch[i-1] & yy);
		    *temp <<= (mp_digit)CHAR_BIT;
            *temp |= (mp_digit)(ch[i-2] & 255);
		    *temp <<= (mp_digit)CHAR_BIT;
            *temp |= (mp_digit)(ch[i-3] & 255);
		    *temp <<= (mp_digit)CHAR_BIT;
            *temp-- |= (mp_digit)(ch[i-4] & 255); //存放被切分的字符的低四位

            
            for(j=chlong-1;j>=i;j--)
			{  
			   *temp |= (mp_digit)(ch[j] & 255);
			   *temp <<= (mp_digit)CHAR_BIT;			                
			}
            *temp >>= (mp_digit)4;
            *temp |= (mp_digit)((ch[i-1] & 255) >> 4);  //存放被切分的字符的高四位
            
			a->used=2;
			return MP_OKAY;
	}

        //以7個字符為單元循環,把七個字符放入的mp_int 的兩個單元中
	for(j=0;j<chlong/7;j++)
	{
		i+=7;
		*++temp |= (mp_digit)(ch[i-1] & 255);
		*temp <<= (mp_digit)CHAR_BIT;
        *temp |= (mp_digit)(ch[i-2] & 255);
		*temp <<= (mp_digit)CHAR_BIT;
        *temp |= (mp_digit)(ch[i-3] & 255);
		*temp <<= (mp_digit)4;
        *temp-- |= (mp_digit)((ch[i-4] & 255) >> 4);    //存放被切分的字符的高四位

		*temp |= (mp_digit)(ch[i-4] & yy);      //存放被切分的字符的低四位
        *temp <<= (mp_digit)CHAR_BIT;
        *temp |= (mp_digit)(ch[i-5] & 255);
		*temp <<= (mp_digit)CHAR_BIT;
        *temp |= (mp_digit)(ch[i-6] & 255);
		*temp <<= (mp_digit)CHAR_BIT;
        *temp++ |= (mp_digit)(ch[i-7] & 255); 

		temp++;
	
	}
 
	if((chlong>=7)&&(chlong%7!=0))        //剩余字符的存放
	{
		if(chlong%7 < 4)           //剩余字符少余4個時,只需一個mp_digit單元存放
		{
			for(j=chlong-1;j>=i;j--)
			{
			   *temp |= (mp_digit)(ch[j] & 255);
               *temp <<= (mp_digit)CHAR_BIT;
			}
			*temp >>= (mp_digit)8;
			a->used=chlong*2/7+1;
		}
		else
		{                       //剩余字符不小于4個時,需兩個mp_digit單元存放
			i+=4;
            *temp |= (mp_digit)(ch[i-1] & yy);
		    *temp <<= (mp_digit)CHAR_BIT;
            *temp |= (mp_digit)(ch[i-2] & 255);
		    *temp <<= (mp_digit)CHAR_BIT;
            *temp |= (mp_digit)(ch[i-3] & 255);
		    *temp <<= (mp_digit)CHAR_BIT;
            *temp++ |= (mp_digit)(ch[i-4] & 255); //存放被切分的字符的低四位

            
            for(j=chlong-1;j>=i;j--)
			{  
			   *temp |= (mp_digit)(ch[j] & 255);
			   *temp <<= (mp_digit)CHAR_BIT;			                
			}
            *temp >>= (mp_digit)4;
            *temp |= (mp_digit)((ch[i-1] & 255) >> 4);  //存放被切分的字符的高四位
            
			a->used=chlong*2/7+2;
		}

	}
	else
	{
	   a->used=chlong*2/7;
	}
	return MP_OKAY;
}


void Ecc_encipher(mp_int *qx,mp_int *qy, mp_int *px, mp_int *py,mp_int *a,mp_int *p,CString filehead,CString filefoot)
{
   CFileDialog fd(TRUE);
   CString filen;
   char fn[40];
   if(IDOK==fd.DoModal())  // 啟動用于選擇文件的對話框
	{
		//選擇了文件
		filen=fd.GetFileName();  //獲取選擇的文件的文件名
		strcpy(fn,filen.GetBuffer(0));
	}
	else return; //按了取消按鈕

	mp_int mx, my;
	mp_int c1x, c1y;
	mp_int c2x, c2y;
    mp_int r;
	mp_int tempx, tempy;
    bool zero=false;
    FILE *fp,*fq;
	int i;
    char miwenx[280]={0};
    char miweny[280]={0};
	char stemp[650]={0};


	mp_init(&mx);
	mp_init(&my);
	mp_init(&c1x);
	mp_init(&c1y);
	mp_init(&c2x);
	mp_init(&c2y);
    mp_init(&r);
	mp_init(&tempx);
	mp_init(&tempy);

	GetPrime(&r, 100);

	//char filehead[60],filefoot[20],
	char filename[85]={0};
    strcpy(filename,fn);
    //cout<<"請輸入您要加密文件的存放路徑和文件名(如:  c:\\000\\大整數運算  ):"<<endl;
	//cin>>filehead;
   // cout<<"請輸入您要加密文件的擴展名(如:  .doc  ):"<<endl;
//	cin>>filefoot;
	//strcpy(filename,filehead);
	//strcat(filename,filefoot);
	

//打開要加密文件
	if((fp=fopen(filename,"rb"))==NULL)
	{
	  AfxMessageBox("Can not open file");
		exit(1);
	}

	unsigned int FileLong=0;//文件字符長度
	char ChTem;//臨時字符變
	int Frequency=0;
	int Residue=0;

    while( !feof(fp) )//找文件字符長度
	{
		ChTem = fgetc( fp );
		FileLong++;
	}
    --FileLong;


	Frequency = FileLong/EN_LONG;
	Residue = FileLong%EN_LONG;

	int enlongtemp=EN_LONG/2;
	//printf("%d\n",Frequency);  
	//printf("%d\n",Residue);  

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
av不卡免费电影| 精品av综合导航| 91欧美一区二区| 风间由美性色一区二区三区| 国产成人aaaa| 国产91清纯白嫩初高中在线观看| 国产一区二区精品久久| 国产尤物一区二区| 国产成人久久精品77777最新版本| 国产一区在线精品| 亚洲一区二区三区自拍| 欧美电影免费观看高清完整版| 91麻豆精品91久久久久同性| 日韩一区二区三区观看| 欧美成人福利视频| 久久久亚洲国产美女国产盗摄| 久久久久久久电影| 中文字幕免费不卡| 一区二区三区在线看| 亚洲国产一区二区a毛片| 天天射综合影视| 蜜桃精品视频在线观看| 国产乱码精品一品二品| 不卡视频一二三| 日本道免费精品一区二区三区| 欧洲精品一区二区| 日韩一二三区视频| 欧美激情一二三区| 亚洲精品自拍动漫在线| 亚洲资源中文字幕| 久久国产福利国产秒拍| 国产mv日韩mv欧美| 日本福利一区二区| 日韩视频免费观看高清完整版在线观看 | 亚洲成av人影院在线观看网| 美国av一区二区| 国产精品99久久不卡二区| 99麻豆久久久国产精品免费 | 欧美精选一区二区| 欧美变态tickling挠脚心| 中文字幕欧美区| 亚洲国产日产av| 韩国精品久久久| 色呦呦日韩精品| 日韩免费视频线观看| 亚洲欧洲www| 蜜臀精品一区二区三区在线观看 | 午夜伊人狠狠久久| 国产成人av福利| 欧美日韩成人一区二区| 久久久激情视频| 亚洲自拍欧美精品| 国产风韵犹存在线视精品| 欧美在线观看视频在线| 久久久久久久综合狠狠综合| 亚洲一区在线观看网站| 国产伦精品一区二区三区在线观看| 日本韩国精品在线| 国产日韩欧美精品在线| 日韩激情视频在线观看| 99久久综合色| 日本亚洲欧美天堂免费| 成人永久免费视频| 欧美一区二区三区性视频| 亚洲色图欧洲色图婷婷| 美腿丝袜在线亚洲一区| 色屁屁一区二区| 国产欧美日韩视频在线观看| 日韩高清在线电影| 在线视频欧美精品| 国产精品欧美精品| 国产在线视频不卡二| 欧美日韩电影在线| 一本大道综合伊人精品热热| 欧美群妇大交群的观看方式| 国产精品嫩草99a| 久久国产日韩欧美精品| 欧美色老头old∨ideo| 国产精品美女久久久久久久| 韩国成人在线视频| 在线不卡中文字幕| 亚洲一区电影777| 99久久精品费精品国产一区二区| 久久精品一区二区| 久久激情五月激情| 69堂成人精品免费视频| 亚洲综合成人网| 91视频.com| 中文字幕亚洲区| 成人动漫视频在线| 中文字幕免费不卡| 丰满亚洲少妇av| 久久精品亚洲麻豆av一区二区 | 在线观看亚洲精品视频| 中文字幕一区二区不卡| 成人国产精品免费观看| 中文字幕欧美国产| 成人免费看视频| 国产精品网站导航| 成人av免费在线播放| 国产精品午夜电影| 成人黄色a**站在线观看| 亚洲国产激情av| 白白色 亚洲乱淫| 日韩一区在线免费观看| 99精品视频中文字幕| 中文字幕在线不卡视频| 99re在线视频这里只有精品| 一区精品在线播放| 色婷婷av一区二区三区大白胸| 综合久久综合久久| 欧美中文字幕一区| 肉丝袜脚交视频一区二区| 欧美一区二区三区小说| 麻豆精品视频在线观看| 欧美精品一区二区高清在线观看 | 在线观看免费视频综合| 一区二区三区中文字幕电影| 在线视频欧美区| 五月天视频一区| 日韩欧美国产综合一区| 狠狠狠色丁香婷婷综合久久五月| 久久久青草青青国产亚洲免观| 国产九色sp调教91| 成人欧美一区二区三区1314| 色网站国产精品| 午夜精品福利在线| 26uuu亚洲| 99riav一区二区三区| 亚洲高清免费在线| 精品久久久久久综合日本欧美| 国产成人免费在线视频| 亚洲人成在线观看一区二区| 欧美日韩国产大片| 精品一区免费av| 日韩理论片网站| 制服丝袜成人动漫| 国产精品66部| 亚洲免费看黄网站| 日韩三级高清在线| www.亚洲激情.com| 日韩在线观看一区二区| 久久综合丝袜日本网| 色婷婷综合久色| 久久精品国产一区二区三区免费看| 欧美国产激情二区三区| 欧美日韩一区 二区 三区 久久精品| 美女mm1313爽爽久久久蜜臀| 国产精品久久久久久久岛一牛影视| 欧美视频自拍偷拍| 国产一区二区精品在线观看| 亚洲免费观看高清完整版在线观看| 欧美一卡二卡在线| av在线不卡网| 捆绑变态av一区二区三区| 最新高清无码专区| 日韩精品一区国产麻豆| 91蜜桃视频在线| 国产在线精品一区二区三区不卡| 亚洲精品日日夜夜| 久久蜜臀中文字幕| 欧美精品 日韩| 99久久精品国产毛片| 蓝色福利精品导航| 一区二区欧美精品| 日本一区二区三区久久久久久久久不 | 91丨porny丨首页| 久久91精品国产91久久小草| 亚洲精品久久久蜜桃| 久久香蕉国产线看观看99| 欧美体内she精高潮| 粉嫩av一区二区三区在线播放 | 粉嫩高潮美女一区二区三区| 日韩国产在线一| 亚洲欧美激情一区二区| 久久久不卡网国产精品二区| 欧美日韩精品一区二区天天拍小说| 国产成人精品一区二区三区四区| 日韩不卡免费视频| 亚洲精品国产精品乱码不99| 国产日韩欧美高清| 精品国产免费一区二区三区香蕉| 欧美亚日韩国产aⅴ精品中极品| 国产成人综合在线| 久久99蜜桃精品| 日韩高清不卡一区二区| 亚洲美女偷拍久久| 中文字幕亚洲综合久久菠萝蜜| 久久九九全国免费| 精品国产91九色蝌蚪| 在线成人高清不卡| 欧美午夜精品电影| 色国产精品一区在线观看| 波多野结衣精品在线| 国产成人日日夜夜| 国产成人精品免费一区二区| 国产麻豆精品一区二区| 国产一区二区不卡| 国产精品一区二区在线观看不卡| 狠狠色丁香九九婷婷综合五月|