資源簡介
實現了ECC算法的加密解密,主要是對字符串的加解密。
(Realize the ECC algorithm encrypt, decrypt, is mainly to the string encryption.)

代碼片段和文件信息
/* 1、用戶A選定一條適合加密的橢圓曲線Ep(ab)(如:y2=x3+ax+b),并取橢圓曲線上一點,作為基點G。
2、用戶A選擇一個私有密鑰k,并生成公開密鑰K=kG。
3、用戶A將Ep(ab)和點K,G傳給用戶B。
4、用戶B接到信息后?,將待傳輸的明文編碼到Ep(ab)上一點M,并產生一個隨機整數r(r 5、用戶B計算點C1=M+rK;C2=rG。
6、用戶B將C1、C2傳給用戶A。
7、用戶A接到信息后,計算C1-kC2,結果就是點M。因為
??????????C1-kC2=M+rK-k(rG)=M+rK-r(kG)=M
再對點M進行解碼就可以得到明文。
?? 密碼學中,描述一條Fp上的橢圓曲線,常用到六個參量:
???????T=(pabGnh)。
(p?、a?、b?)用來確定一條橢圓曲線,G為基點,n為點G的階,h?是橢圓曲線上所有點的個數m與n相除的整數部分)
這幾個參量取值的選擇,直接影響了加密的安全性。參量值一般要求滿足以下幾個條件:
1、p?當然越大越安全,但越大,計算速度會變慢,200位左右可以滿足一般安全要求;
2、p≠n×h;
3、pt≠1?(mod?n),1≤t<20;
4、4a3+27b2≠0?(mod?p);
5、n?為素數;
6、h≤4。
*/
#include?
#include?
#include?
#include?
#include?“tommath.h“
#include?
#define?BIT_LEN?800?
#define?KEY_LONG?160??//私鑰比特長
#define?P_LONG?200????//有限域P比特長
#define?EN_LONG?40????//一次取明文字節數(x20)(y20)
int?CYPTEXT[600]={‘\0‘};
int?CYPCOUNT=0;
int?PLAINCOUNT=0;
//得到lon比特長素數
int?GetPrime(mp_int?*mint?lon);
//得到B和G點X坐標G點Y坐標.G點X坐標隨機得到。b隨機得到。a,p此時已知。
void?Get_B_X_Y(mp_int?*x1mp_int?*y1mp_int?*b??mp_int?*a??mp_int?*p);
//點乘
bool?Ecc_points_mul(mp_int?*qxmp_int?*qy?mp_int?*px?mp_int?*pymp_int?*dmp_int?*amp_int?*p);
//點加
int?Two_points_add(mp_int?*x1mp_int?*y1mp_int?*x2mp_int?*y2mp_int?*x3mp_int?*y3mp_int?*abool?zeromp_int?*p);
//二進制存儲密文
int?chmistore(mp_int?*aFILE?*fp);
//把讀取的字符存入mp_int型數
int?putin(mp_int?*achar?*chint?chlong);
//ECC加密
void?Ecc_encipher(mp_int?*qxmp_int?*qy?mp_int?*px?mp_int?*pymp_int?*amp_int?*p);
//ECC解密
void?Ecc_decipher(mp_int?*k?mp_int?*amp_int?*p);
//實現將mp_int數a中的比特串還原為字符串并賦給字符串ch:
int?chdraw(mp_int?*achar?*ch);
//取密文
int?miwendraw(mp_int?*achar?*chint?chlong);
int?myrng(unsigned?char?*dst?int?len?void?*dat)
{
???int?x;
???for?(x?=?0;?x????return?len;
}
void?main(){
cout<<“\n 本程序實現橢圓曲線的加密解密“<
cout<<“\n------------------------------------------------------------------------\n“< ???
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)
//初始化各個mp_int結構
mp_init(&GX);
mp_init(&GY);
mp_init(&K);
mp_init(&A);
mp_init(&B);
mp_init(&QX);
mp_init(&QY);
mp_init(&P);
//隨機數發生器初始化
????time_t?t;???????????
????srand(?(unsigned)?time(?&t?)?);
//初始化橢圓曲線各個參數
????printf(“橢圓曲線的參數如下(以十進制顯示):\n“);
????GetPrime(&PP_LONG);
printf(“有限域?P?是:\n“);
char?temp[800]={0};
????mp_toradix(&Ptemp10);
????printf(“%s\n“temp);????
????GetPrime(&A30);
char?tempA[800]={0};
printf(“曲線參數?A?是:\n“);
????mp_toradix(&AtempA10);
????printf(“%s\n“tempA);?
Get_B_X_Y(&GX&GY&B&A&P);
????char?tempB[800]={0};
printf(“曲線參數?B?是:\n“);
????mp_toradix(&BtempB10);
????printf(“%s\n“tempB);?
char?tempGX[800]={0};
printf(“曲線G點X坐標是:\n“);
????mp_toradix(&GXtempGX10);
????printf(“%s\n“tempGX);???
char?tempGY[800]={0};
printf(
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????3318784??2011-03-31?17:14??ecc\Debug\my_ecc.bsc
?????文件?????262196??2011-03-31?17:14??ecc\Debug\my_ecc.exe
?????文件?????383376??2011-03-31?17:14??ecc\Debug\my_ecc.ilk
?????文件??????37099??2011-03-31?17:14??ecc\Debug\my_ecc.obj
?????文件?????325956??2011-03-31?16:00??ecc\Debug\my_ecc.pch
?????文件?????861184??2011-03-31?17:14??ecc\Debug\my_ecc.pdb
?????文件??????????0??2011-03-31?17:14??ecc\Debug\my_ecc.sbr
?????文件??????11355??2011-03-30?14:39??ecc\Debug\StdAfx.obj
?????文件??????????0??2011-03-30?14:39??ecc\Debug\StdAfx.sbr
?????文件?????222208??2012-03-12?11:22??ecc\Debug\vc60.idb
?????文件??????86016??2011-03-31?17:14??ecc\Debug\vc60.pdb
?????文件?????155136??2006-09-24?14:38??ecc\ecc.lib
?????文件??????21203??2009-03-21?09:35??ecc\ECC程序.txt
?????文件?????369776??2005-01-25?17:40??ecc\MathLib.lib
?????文件??????24768??2011-03-31?17:14??ecc\my_ecc.cpp
?????文件???????3529??2011-03-23?23:14??ecc\my_ecc.dsp
?????文件????????520??2009-04-20?22:16??ecc\my_ecc.dsw
?????文件??????99328??2012-03-12?11:24??ecc\my_ecc.ncb
?????文件??????55808??2012-03-12?11:24??ecc\my_ecc.opt
?????文件????????246??2012-03-12?11:00??ecc\my_ecc.plg
?????文件????????210??2004-04-15?22:46??ecc\Source\ecc.bpf
?????文件???????5434??2006-09-24?14:38??ecc\Source\ecc.bpr
?????文件???????1969??2005-02-04?12:19??ecc\Source\ecc.h
?????文件???????4466??2005-04-02?20:23??ecc\Source\eccBrowseForDirectory.cpp
?????文件???????3311??2005-02-04?12:19??ecc\Source\eccBrowseForDirectory.h
?????文件???????1251??2005-02-04?12:19??ecc\Source\eccCheckStringList.cpp
?????文件???????2160??2005-02-04?12:19??ecc\Source\eccCheckStringList.h
?????文件???????2646??2005-02-04?12:19??ecc\Source\eccError.cpp
?????文件???????2479??2005-02-04?12:19??ecc\Source\eccError.h
?????文件??????14865??2005-03-01?14:52??ecc\Source\eccFile.cpp
............此處省略46個文件信息
評論
共有 條評論