亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
91啦中文在线观看| 免费成人在线视频观看| 久久久精品综合| www久久精品| 欧美精品一区二| 久久精品一区蜜桃臀影院| 精品国产免费视频| 国产免费久久精品| 国产精品毛片高清在线完整版| 亚洲国产成人自拍| 国产精品午夜电影| 亚洲精品乱码久久久久久黑人| 最近中文字幕一区二区三区| 一区二区三区国产精华| 亚洲国产美女搞黄色| 日韩电影一区二区三区| 久久99精品久久久久久久久久久久 | 久久男人中文字幕资源站| 精品久久国产老人久久综合| 久久亚洲春色中文字幕久久久| 日本一区二区三级电影在线观看| 国产精品成人一区二区艾草 | 在线精品视频一区二区| 欧美午夜一区二区三区| 日韩一区二区精品| 国产精品乱码久久久久久| 亚洲色大成网站www久久九九| 亚洲午夜私人影院| 激情图片小说一区| 在线精品视频一区二区| 欧美电影免费观看高清完整版在线| 国产情人综合久久777777| 一区二区三区欧美激情| 国产尤物一区二区| 在线观看亚洲专区| 国产丝袜欧美中文另类| 香蕉乱码成人久久天堂爱免费| 久久国产精品露脸对白| 91久久免费观看| 国产午夜精品在线观看| 亚洲一二三四久久| 懂色av噜噜一区二区三区av| 欧美日韩免费高清一区色橹橹| 国产网站一区二区| 日韩国产欧美在线观看| 91麻豆精东视频| 欧美激情一区二区三区全黄| 日日夜夜免费精品视频| 一本久久综合亚洲鲁鲁五月天 | 国产精品美女久久久久久久 | 爽好久久久欧美精品| av一区二区三区四区| 久久综合九色综合97婷婷女人| 亚洲宅男天堂在线观看无病毒| 国产成人免费视频网站| 日韩写真欧美这视频| 亚洲国产aⅴ成人精品无吗| 99国产精品久| 国产精品欧美经典| 国产夫妻精品视频| 久久天天做天天爱综合色| 日本美女一区二区三区| 欧美日韩国产经典色站一区二区三区| 国产精品毛片久久久久久久| 豆国产96在线|亚洲| 国产日韩v精品一区二区| 黑人巨大精品欧美一区| 日韩欧美美女一区二区三区| 免费在线成人网| 7777精品伊人久久久大香线蕉| 亚洲国产日韩综合久久精品| 色域天天综合网| 亚洲免费观看在线视频| 99久久精品国产一区| 日韩一区中文字幕| 91浏览器打开| 亚洲国产综合在线| 欧美日韩二区三区| 免费一区二区视频| 精品粉嫩超白一线天av| 国产综合色在线| 欧美国产在线观看| 91在线国产福利| 亚洲综合一区二区三区| 在线成人免费观看| 久久99精品久久久久久国产越南| 精品国产91洋老外米糕| 国产.欧美.日韩| 中文字幕一区二区三区视频| 91免费国产在线观看| 亚洲一区二区三区四区中文字幕| 欧美日韩一级片在线观看| 日韩国产欧美一区二区三区| 26uuu亚洲综合色| 成人理论电影网| 亚洲宅男天堂在线观看无病毒| 欧美精品久久天天躁| 国产麻豆精品久久一二三| 亚洲色图视频免费播放| 91精品免费在线观看| 国产真实乱偷精品视频免| 最新日韩av在线| 51午夜精品国产| 成人一区二区三区中文字幕| 亚洲午夜免费电影| 久久久久久久久岛国免费| 色综合天天性综合| 精品无人码麻豆乱码1区2区| 日韩一区中文字幕| 欧美成人aa大片| 91麻豆swag| 国产麻豆一精品一av一免费| 亚洲你懂的在线视频| 精品国产乱码久久久久久影片| 一本色道综合亚洲| 国产高清不卡一区| 日韩经典一区二区| 亚洲欧美综合色| 久久久高清一区二区三区| 欧美日韩dvd在线观看| 成人a免费在线看| 国模一区二区三区白浆| 丝袜美腿高跟呻吟高潮一区| 国产精品美女一区二区三区| 精品黑人一区二区三区久久| 91高清视频免费看| 成人激情电影免费在线观看| 久久精品国内一区二区三区| 亚洲激情第一区| 国产精品乱人伦| 国产天堂亚洲国产碰碰| 日韩精品一区二区三区四区视频| 在线一区二区观看| av电影在线观看不卡| 国产成人免费视频精品含羞草妖精| 日韩二区在线观看| 午夜久久福利影院| 亚洲一二三四久久| 亚洲宅男天堂在线观看无病毒| 国产精品超碰97尤物18| 欧美激情一区二区三区四区| 久久精品人人做人人爽人人| 日韩欧美中文字幕制服| 911精品国产一区二区在线| 在线观看91精品国产入口| 色又黄又爽网站www久久| 91社区在线播放| 99久久99精品久久久久久| 成人av网在线| 色域天天综合网| 欧美影视一区二区三区| 欧美亚日韩国产aⅴ精品中极品| 色婷婷亚洲一区二区三区| 91丨九色丨蝌蚪富婆spa| 91麻豆成人久久精品二区三区| 91久久免费观看| 欧美日韩国产精品成人| 欧美一区二区视频在线观看2020 | 国产三级精品三级| 国产午夜精品美女毛片视频| 中文字幕精品一区二区精品绿巨人 | 免费欧美日韩国产三级电影| 蜜桃传媒麻豆第一区在线观看| 久久国产福利国产秒拍| 久久精品国产一区二区三| 狠狠色狠狠色综合| 丰满白嫩尤物一区二区| 99精品欧美一区二区三区小说| 色悠悠亚洲一区二区| 欧美精品久久99久久在免费线| 666欧美在线视频| 久久只精品国产| 成人欧美一区二区三区白人| 亚洲国产日韩综合久久精品| 久草这里只有精品视频| 99精品在线免费| 欧美日韩国产精品自在自线| 亚洲精品在线三区| 亚洲欧洲在线观看av| 亚洲成av人影院在线观看网| 久草精品在线观看| 色一情一伦一子一伦一区| 欧美一区二区三区四区久久| 国产日韩欧美精品一区| 亚洲va天堂va国产va久| 国产酒店精品激情| 欧美视频一区二区在线观看| 久久网站最新地址| 亚洲一区在线看| 国产乱对白刺激视频不卡| 日本韩国一区二区| 久久综合五月天婷婷伊人| 亚洲男女毛片无遮挡| 久久国产精品72免费观看| 日本精品免费观看高清观看| 久久久久久电影| 首页国产欧美久久| 色综合av在线| 欧美国产日本韩| 久久99精品久久久久久久久久久久|