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

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

?? helpdlg.cpp

?? RSA算法,大素數生成,加密解密
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
#include "stdafx.h"
#include "RsaKit.h"
#include "HelpDlg.h"

CHelpDlg::CHelpDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CHelpDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CHelpDlg)
	//}}AFX_DATA_INIT
}

void CHelpDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CHelpDlg)
	DDX_Control(pDX, IDC_EDIT, m_Edit);
	DDX_Control(pDX, IDC_TREE, m_Tree);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CHelpDlg, CDialog)
	//{{AFX_MSG_MAP(CHelpDlg)
	ON_NOTIFY(TVN_SELCHANGED, IDC_TREE, OnSelchangedTree)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

BOOL CHelpDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();

    TV_INSERTSTRUCT TreeCtrlItem;

	TreeCtrlItem.hParent = TVI_ROOT;
	TreeCtrlItem.hInsertAfter = TVI_LAST;
	TreeCtrlItem.item.mask = TVIF_TEXT | TVIF_PARAM;
	TreeCtrlItem.item.pszText = _T("前言");
	TreeCtrlItem.item.lParam = 1;
	HTREEITEM hTreeItem0 = m_Tree.InsertItem(&TreeCtrlItem);

	TreeCtrlItem.hParent = TVI_ROOT;
	TreeCtrlItem.hInsertAfter = TVI_LAST;
	TreeCtrlItem.item.mask = TVIF_TEXT | TVIF_PARAM;
	TreeCtrlItem.item.pszText = _T("原理介紹");
	TreeCtrlItem.item.lParam = 0;
	HTREEITEM hTreeItem1 = m_Tree.InsertItem(&TreeCtrlItem);

	TreeCtrlItem.hParent = hTreeItem1;
	TreeCtrlItem.item.pszText = _T("大數存儲");
	TreeCtrlItem.item.lParam = 2;
	m_Tree.InsertItem(&TreeCtrlItem);

	TreeCtrlItem.hParent = hTreeItem1;
	TreeCtrlItem.item.pszText = _T("加法");
	TreeCtrlItem.item.lParam = 3;
	m_Tree.InsertItem(&TreeCtrlItem);  
	
	TreeCtrlItem.hParent = hTreeItem1;
	TreeCtrlItem.item.pszText = _T("減法");
	TreeCtrlItem.item.lParam = 4;
	m_Tree.InsertItem(&TreeCtrlItem); 

	TreeCtrlItem.hParent = hTreeItem1;
	TreeCtrlItem.item.pszText = _T("乘法");
	TreeCtrlItem.item.lParam = 5;
	m_Tree.InsertItem(&TreeCtrlItem);
	
	TreeCtrlItem.hParent = hTreeItem1;
	TreeCtrlItem.item.pszText = _T("除法");
	TreeCtrlItem.item.lParam = 6;
	m_Tree.InsertItem(&TreeCtrlItem);

	TreeCtrlItem.hParent = hTreeItem1;
	TreeCtrlItem.item.pszText = _T("取模");
	TreeCtrlItem.item.lParam = 7;
	m_Tree.InsertItem(&TreeCtrlItem); 
	
	TreeCtrlItem.hParent = hTreeItem1;
	TreeCtrlItem.item.pszText = _T("二元一次方程");
	TreeCtrlItem.item.lParam = 8;
	m_Tree.InsertItem(&TreeCtrlItem);

	TreeCtrlItem.hParent = hTreeItem1;
	TreeCtrlItem.item.pszText = _T("冪模運算");
	TreeCtrlItem.item.lParam = 9;
	m_Tree.InsertItem(&TreeCtrlItem);
	
	TreeCtrlItem.hParent = hTreeItem1;
	TreeCtrlItem.item.pszText = _T("素數測試");
	TreeCtrlItem.item.lParam = 10;
	m_Tree.InsertItem(&TreeCtrlItem);

	TreeCtrlItem.hParent = hTreeItem1;
	TreeCtrlItem.item.pszText = _T("輸入輸出");
	TreeCtrlItem.item.lParam = 11;
	m_Tree.InsertItem(&TreeCtrlItem);

	return TRUE;
}

void CHelpDlg::OnSelchangedTree(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
	switch(pNMTreeView->itemNew.lParam)
	{
	case 0:
		break;
	case 1:
		m_Text="";
		m_Text+="\r\n";
		m_Text+="    俺曾經查閱了網上找得到的各種用于實現RSA 的大數運算庫,然而最終還是決定";
		m_Text+="\r\n";
		m_Text+="自己動手寫一個。因為凡是效率高速度快的代碼,如 crypto++、miracl、freelip、";
		m_Text+="\r\n";
		m_Text+="rsaref等,要么使用的算法過于復雜,要么編碼風格雜亂無章,俺的水平和耐心都實";
		m_Text+="\r\n";
		m_Text+="在是有限,以至于無法讀懂這些東西。而俺讀得懂的一些代碼,其實現方式卻又過于";
		m_Text+="\r\n";
		m_Text+="幼稚,效率極低速度一塌糊涂。俺想象俺這樣的人不在少數,于是決心做一個清晰易";
		m_Text+="\r\n";
		m_Text+="懂,效率也過得去的東西奉獻給大家。";
		m_Text+="\r\n";
		m_Text+="\r\n";
		m_Text+="    這個函數庫剛做好的時候,生成1024位的隨機密鑰耗時大約5 分鐘,俺認為是可";
		m_Text+="\r\n";
		m_Text+="以接受的。但后來找到一個叫tE! 的老外用miracl庫寫的RsaTools,發現其生成1024";
		m_Text+="\r\n";
		m_Text+="位的密鑰耗時不超過三秒鐘!于是俺針對俺的代碼開始了艱苦的優化工作,希望能達";
		m_Text+="\r\n";
		m_Text+="到甚至超過這一水平。一周之后1024位密鑰的平均生成時間已經降至5 秒以內,但是";
		m_Text+="\r\n";
		m_Text+="單單依靠優化代碼來進一步提高速度也非常困難了。于是俺開始借助金山詞霸來查閱";
		m_Text+="\r\n";
		m_Text+="能夠通過google找到的一切與Rsa 算法相關的論文,直到今天俺決定放棄,因為俺發";
		m_Text+="\r\n";
		m_Text+="現在改用越來越復雜的數學算法的同時俺離自己的初衷也越來越遠:俺的代碼也不再";
		m_Text+="\r\n";
		m_Text+="清晰易懂了。";
		m_Text+="\r\n";
		m_Text+="\r\n";
		m_Text+="    現在這個版本的函數庫采用了最簡單的結構和最容易理解的算法,速度也不算太";
		m_Text+="\r\n";
		m_Text+="慢,用C++ 語言,可在VC6.0 下直接編譯通過,希望大家喜歡。如果發現Bug 或者有";
		m_Text+="\r\n";
		m_Text+="好的修改建議,俺將非常感謝您能夠給俺一個Mail。";
		m_Text+="\r\n";
		m_Text+="\r\n";
		m_Text+="    最后,感謝看雪論壇,俺在此學到了很多知識,也要感謝雪兄多次熱心相助,當";
        m_Text+="\r\n";
		m_Text+="然還要乘機拍拍馬屁,感謝俺家甜甜的支持!";
		m_Text+="\r\n";
        m_Text+="\r\n";
		m_Text+="    afanty@vip.sina.com";
        m_Edit.SetWindowText(m_Text);
		break;
	case 2:
		m_Text="";
		m_Text+="\r\n";
		m_Text+="    RSA 依賴大數運算,目前主流RSA 算法都建立在512 到1024位的大數運算之上。";
		m_Text+="\r\n";
		m_Text+="而大多數的編譯器只能支持到64位的整數運算,即我們在運算中所使用的整數必須小";
		m_Text+="\r\n";
		m_Text+="于等于64位,即:0xffffffffffffffff,也就是18446744073709551615,這遠遠達不";
		m_Text+="\r\n";
		m_Text+="到RSA 的需要,于是需要專門建立大數運算庫來解決這一問題。";
		m_Text+="\r\n";
		m_Text+="\r\n";
		m_Text+="    最簡單的辦法是將大數當作數組進行處理,也就是將大數用0—9這十個數字組成";
		m_Text+="\r\n";
		m_Text+="的數組進行表示,然后模擬人們手工進行“豎式計算”的過程編寫其加減乘除函數。";
		m_Text+="\r\n";
		m_Text+="但是這樣做效率很低,因為二進制為1024位的大數其十進制也有三百多位,對于任何";
		m_Text+="\r\n";
		m_Text+="一種運算,都需要在兩個有數百個元素的數組空間上做多重循環,還需要許多額外的";
		m_Text+="\r\n";
		m_Text+="空間存放計算的進退位標志及中間結果。另外,對于某些特殊的運算而言,采用二進";
		m_Text+="\r\n";
		m_Text+="制會使計算過程大大簡化,這種大數表示方法轉化成二進制顯然非常麻煩,所以在某";
		m_Text+="\r\n";
		m_Text+="些實例中則干脆采用了二進制數組的方法來記錄大數,這樣效率就更低了。";
		m_Text+="\r\n";
		m_Text+="\r\n";
		m_Text+="    一個有效的改進方法是將大數表示為一個n 進制數組,對于目前的32位系統而言";
		m_Text+="\r\n";
		m_Text+="n 可以取值為2 的32次方,即0x10000000,假如將一個二進制為1024位的大數轉化成";
		m_Text+="\r\n";
		m_Text+="0x10000000進制,它就變成了32位,而每一位的取值范圍就不是二進制的0—1或十進";
		m_Text+="\r\n";
		m_Text+="制的0—9,而是0-0xffffffff,我們正好可以用一個無符號長整數來表示這一數值。";
		m_Text+="\r\n";
		m_Text+="所以1024位的大數就是一個有32個元素的unsigned long數組,針對unsigned long數";
		m_Text+="\r\n";
		m_Text+="組進行各種運算所需的循環規模至多32次而已。而且0x100000000 進制與二進制,對";
		m_Text+="\r\n";
		m_Text+="于計算機來說,幾乎是一回事,轉換非常容易。";
		m_Text+="\r\n";
		m_Text+="\r\n";
		m_Text+="    例如大數18446744073709551615,等于 ffffffff ffffffff,就相當于十進制的";
		m_Text+="\r\n";
		m_Text+="99:有兩位,每位都是ffffffff。而18446744073709551616 等于00000001 00000000";
		m_Text+="\r\n";
		m_Text+="00000000,就相當于十進制的100:有三位,第一位是1 ,其它兩位是0,如此等等。";
		m_Text+="\r\n";
		m_Text+="在實際應用中,“數字”數組的排列順序采用低位在前高位在后的方式,這樣,大數";
		m_Text+="\r\n";
		m_Text+="A 就可以方便地用數學表達式來表示其值:A=Sum[i=0 to n](A[i]*0x100000000**i)";
		m_Text+="\r\n";
		m_Text+="(其中Sum 表示求和,A[i]表示用以記錄A 的數組的第i 個元素,**表示乘方)。";
		m_Text+="\r\n";
		m_Text+="\r\n";
		m_Text+="    任何整數運算最終都能分解成數字與數字之間的運算,在0x100000000 進制下其";
		m_Text+="\r\n";
		m_Text+="“數字”最大達到0xffffffff,其數字與數字之間的運算,結果也必然超出了目前32";
		m_Text+="\r\n";
		m_Text+="系統的字長。在VC++中,存在一個__int64 類型可以處理64位的整數,所以不用擔心";
		m_Text+="\r\n";
		m_Text+="這一問題,而在其它編譯系統中如果不存在64位整形,就需要采用更小的進制方式來";
		m_Text+="\r\n";
		m_Text+="存儲大數,例如WORD類型(16位)可以用來表示0x10000 進制,但效率更高的辦法還";
		m_Text+="\r\n";
		m_Text+="是采用32位的DWORD 類型,只不過將0x100000000 進制改成0x40000000進制,這樣兩";
		m_Text+="\r\n";
		m_Text+="個數字進行四則運算的最大結果為 0x3fffffff * 0x3fffffff,小于0xffffffff,只";
		m_Text+="\r\n";
		m_Text+="是不能簡單地用高位低位來將運算結果拆分成兩個“數字”。";
		m_Text+="\r\n";
		m_Text+="\r\n";
        m_Edit.SetWindowText(m_Text);
		break;
	case 3:
        m_Text="";
		m_Text+="\r\n";
		m_Text+="設:";
		m_Text+="\r\n";
		m_Text+="  A=Sum[i=0 to p](A[i]*0x100000000**i)";
		m_Text+="\r\n";
		m_Text+="  B=Sum[i=0 to q](B[i]*0x100000000**i),p>=q";
		m_Text+="\r\n";
		m_Text+="  C=Sum[i=0 to n](C[i]*0x100000000**i)=A+B";
		m_Text+="\r\n";
		m_Text+="\r\n";
		m_Text+="顯然:";
		m_Text+="\r\n";
		m_Text+="  C[i]不是簡單地等于A[i]+B[i],因為如果C[i]>0xffffffff就需要進位,當然計算";
		m_Text+="\r\n";
		m_Text+="  C[i-1]時也可能產生了進位,所以計算C[i]時還要加上上次的進位值。";
		m_Text+="\r\n";
		m_Text+="\r\n";
		m_Text+="如果用carry[i]記錄每次的進位則有:";
		m_Text+="\r\n";
		m_Text+="  C[i]=A[i]+B[i]+carry[i-1]-carry[i]*0x100000000";
		m_Text+="\r\n";
		m_Text+="  其中carry[-1]=0";
		m_Text+="\r\n";
		m_Text+="  若A[i]+B[i]+carry[i-1]>0xffffffff,則carry[i]=1;反之則carry[i]=0";
		m_Text+="\r\n";
		m_Text+="  若carry[p]=0,則n=p;反之則n=p+1";
		m_Text+="\r\n";
		m_Text+="\r\n";
        m_Edit.SetWindowText(m_Text);
		break;
	case 4:
        m_Text="";
		m_Text+="\r\n";
		m_Text+="設:";
		m_Text+="\r\n";
		m_Text+="  A=Sum[i=0 to p](A[i]*0x100000000**i)";
		m_Text+="\r\n";
		m_Text+="  B=Sum[i=0 to q](B[i]*0x100000000**i),p>=q";
		m_Text+="\r\n";
		m_Text+="  C=Sum[i=0 to n](C[i]*0x100000000**i)=A-B";
		m_Text+="\r\n";
		m_Text+="\r\n";
		m_Text+="顯然:";
		m_Text+="\r\n";
		m_Text+="  C[i]不是簡單地等于A[i]-B[i],因為如果A[i]<B[i]就需要借位,當然計算";
		m_Text+="\r\n";
		m_Text+="  C[i-1]時也可能產生了借位,所以計算C[i]時還要減去上次的借位值。";
		m_Text+="\r\n";
		m_Text+="\r\n";
		m_Text+="如果用carry[i]記錄每次的借位則有:";
		m_Text+="\r\n";
		m_Text+="  C[i]=A[i]+carry[i]*0x100000000-B[i]-carry[i-1]";
		m_Text+="\r\n";
		m_Text+="  其中carry[-1]=0";
		m_Text+="\r\n";
		m_Text+="  若A[i]>B[i]則carry[i]=0;反之則carry[i]=1";
		m_Text+="\r\n";
		m_Text+="  若C[p]=0,則n=p-1;反之則n=p";
		m_Text+="\r\n";
		m_Text+="\r\n";
        m_Edit.SetWindowText(m_Text);
		break;
	case 5:
        m_Text="";
		m_Text+="\r\n";
		m_Text+="設:";
		m_Text+="\r\n";
		m_Text+="  A=Sum[i=0 to p](A[i]*0x100000000**i)";
		m_Text+="\r\n";
		m_Text+="  B=Sum[i=0 to q](B[i]*0x100000000**i),p>=q";
		m_Text+="\r\n";
		m_Text+="  C=Sum[i=0 to n](C[i]*0x100000000**i)=A*B";
		m_Text+="\r\n";
		m_Text+="";
		m_Text+="\r\n";
		m_Text+="顯然:";
		m_Text+="\r\n";
		m_Text+="  C=Sum[i=0 to q](A*B[i]*0x100000000**i)";
		m_Text+="\r\n";
		m_Text+="  而(A*B[i]*100000000**i)=Sum[j=0 to p](A[j]*B[i]*0x100000000**(i+j))";
		m_Text+="\r\n";
		m_Text+="  所以C=Sum[i=0 to q](Sum[j=0 to p](A[j]*B[i]*0x100000000**(i+j)))";
		m_Text+="\r\n";
		m_Text+="";
		m_Text+="\r\n";
		m_Text+="因此:";
		m_Text+="\r\n";

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美国产日韩在线观看| 日本一不卡视频| 欧美—级在线免费片| 久久久久亚洲综合| 国产日韩欧美精品综合| 国产欧美一区二区精品性| 久久久久久夜精品精品免费| www激情久久| 2021国产精品久久精品| 2017欧美狠狠色| 久久久久高清精品| 久久久精品国产99久久精品芒果 | 国产欧美一区二区精品性色| 亚洲精品一区二区三区蜜桃下载| 欧美成人午夜电影| 久久久一区二区| 欧美韩国一区二区| 中文字幕在线免费不卡| 亚洲精品国产a| 亚洲成人动漫一区| 久久精品99国产精品日本| 韩国一区二区在线观看| 国产ts人妖一区二区| 91一区二区三区在线观看| 色94色欧美sute亚洲线路二 | 欧美一区二区三区视频| 精品三级av在线| 国产日韩精品一区| 亚洲色图视频网| 午夜精品爽啪视频| 精品一区二区精品| 成人免费视频视频在线观看免费| 色综合久久中文综合久久97| 精品视频色一区| 欧美成人a视频| 中文乱码免费一区二区| 一区二区三区四区视频精品免费| 五月婷婷激情综合| 国产一区二区三区香蕉| 91影视在线播放| 日韩视频一区二区三区在线播放| 久久久九九九九| 亚洲一区在线观看免费| 免费视频一区二区| 99九九99九九九视频精品| 欧美乱妇15p| 国产日韩欧美精品在线| 亚洲福利视频一区| 丰满亚洲少妇av| 欧美精品免费视频| 欧美激情一区二区在线| 亚洲成人免费观看| 成人一区二区三区中文字幕| 777午夜精品免费视频| 国产无一区二区| 天天操天天综合网| 不卡av在线网| 日韩欧美自拍偷拍| 亚洲男人电影天堂| 国产福利电影一区二区三区| 欧美日韩国产大片| 国产精品剧情在线亚洲| 久久激情五月激情| 欧美在线观看禁18| 国产视频一区在线播放| 丝袜美腿亚洲一区| 92精品国产成人观看免费| 精品福利一区二区三区| 一个色综合av| 成人手机电影网| 精品乱人伦一区二区三区| 亚洲午夜精品17c| 97成人超碰视| 国产清纯白嫩初高生在线观看91 | 欧美剧情片在线观看| 国产精品国产三级国产aⅴ无密码| 久久精品国产网站| 精品视频在线看| 亚洲精品国产精华液| 成人性生交大片免费看视频在线 | 欧美大片日本大片免费观看| 亚洲激情中文1区| 不卡在线观看av| 国产日韩欧美不卡在线| 久久99久久99精品免视看婷婷| 欧美日韩国产小视频在线观看| 《视频一区视频二区| 国产大陆亚洲精品国产| 日韩精品在线网站| 日本成人在线电影网| 欧美日韩免费电影| 亚洲福利一区二区三区| 在线观看亚洲成人| 一区二区三区在线影院| 91小宝寻花一区二区三区| 国产精品女同一区二区三区| 国产不卡视频在线播放| 久久青草国产手机看片福利盒子| 日韩精品一二三四| 欧美福利视频导航| 日韩国产精品大片| 欧美一区二区三区视频| 蜜桃91丨九色丨蝌蚪91桃色| 69堂成人精品免费视频| 日韩一区精品字幕| 欧美一区二区三区色| 麻豆精品国产传媒mv男同| 欧美本精品男人aⅴ天堂| 久久激情综合网| 久久日韩精品一区二区五区| 国内成人免费视频| 国产欧美一区二区精品久导航 | 精品视频资源站| 亚洲国产毛片aaaaa无费看| 欧美午夜一区二区三区免费大片| 一区二区三区不卡视频| 欧美三级视频在线播放| 日韩精品国产精品| 欧美mv日韩mv国产网站app| 国产呦精品一区二区三区网站 | 久久国产精品无码网站| 精品久久久久久久一区二区蜜臀| 国产一区二区三区在线观看免费 | 成人av影院在线| 亚洲日本在线a| 欧美精品久久一区| 九色|91porny| 国产精品无人区| 91免费精品国自产拍在线不卡| 亚洲男人的天堂在线观看| 精品视频一区二区不卡| 久久99久久久欧美国产| 中文字幕 久热精品 视频在线| 91视频免费播放| 亚洲成人www| 久久久精品免费免费| 一本色道久久综合精品竹菊| 日韩影院免费视频| 欧美激情资源网| 欧美日韩一区精品| 国产乱码精品一区二区三区av | 婷婷开心激情综合| 久久香蕉国产线看观看99| gogo大胆日本视频一区| 青草国产精品久久久久久| 91麻豆精品国产无毒不卡在线观看| 色综合久久88色综合天天免费| 欧美午夜精品理论片a级按摩| 欧美一区二区三区啪啪| 国产精品二三区| 裸体健美xxxx欧美裸体表演| 成人蜜臀av电影| 中文字幕精品综合| 精品久久久影院| 欧美手机在线视频| 色欧美片视频在线观看在线视频| 国产麻豆午夜三级精品| 日韩av电影天堂| 亚洲综合一区二区三区| 国产精品第一页第二页第三页| 精品国产91亚洲一区二区三区婷婷| 欧美视频一区二区在线观看| 色综合色狠狠综合色| 不卡高清视频专区| 国产69精品一区二区亚洲孕妇| 老司机精品视频一区二区三区| 天天综合色天天综合| 亚洲一区二区三区在线播放| 亚洲精品国产一区二区精华液| 中文字幕欧美一| 国产精品久久久久久久久图文区| 久久精品视频在线免费观看 | 亚洲靠逼com| 中文字幕一区三区| 中文字幕亚洲欧美在线不卡| 国产拍欧美日韩视频二区| 久久众筹精品私拍模特| 欧美变态口味重另类| 精品国产一区久久| 26uuu国产一区二区三区| 日韩欧美亚洲国产精品字幕久久久 | 2017欧美狠狠色| 欧美精品一区二区精品网| 精品久久一二三区| 精品区一区二区| www国产成人免费观看视频 深夜成人网| 欧美一级在线视频| 日韩视频在线一区二区| 精品福利在线导航| 国产日韩欧美一区二区三区乱码| 欧美激情一区不卡| 亚洲视频一区在线| 亚洲激情在线播放| 视频在线观看一区| 日本中文一区二区三区| 久久国产综合精品| 国产精品99久久久久久宅男| 成人综合在线视频| 91网页版在线| 欧美日韩色一区|