资源简介

给出椭圆曲线密码体制的公钥,私钥等参数,实现用椭圆曲线密码体制加解密文件

资源截图

代码片段和文件信息


/* 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 128  //私钥比特长
#define P_LONG 200    //有限域P比特长
#define EN_LONG 40    //一次取明文字节数(x20)(y20)


//得到lon比特长素数
int GetPrime(mp_int *mint lon);
//得到B和G点X坐标G点Y坐标
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 < len; x++) dst[x] = rand() & 0xFF;
   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_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(“曲线G点Y坐标是:\n“);
    mp_toradix(&GYtempGY10);
    printf(“%s\n“tempGY); 


//---------------------------------------------

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件     369776  2005-01-25 17:40  my_ecc0\MathLib.lib

     文件       3441  2004-01-06 16:50  my_ecc0\my_ecc.dsp

     文件        537  2004-01-06 16:50  my_ecc0\my_ecc.dsw

     文件        246  2010-01-31 12:38  my_ecc0\my_ecc.plg

     文件       2560  2009-05-07 15:13  my_ecc0\my_ecc.suo

     文件      16673  2004-01-06 16:14  my_ecc0\tommath.h

     文件      19875  2004-01-06 16:15  my_ecc0\tommath_class.h

     文件       2184  2004-12-30 19:55  my_ecc0\tommath_superclass.h

     文件       4268  2009-05-07 14:53  my_ecc0\Debug\BuildLog.htm

     文件       2048  2009-04-01 18:45  my_ecc0\Debug\my_ecc.exe.embed.manifest

     文件       2112  2009-04-18 10:26  my_ecc0\Debug\my_ecc.exe.embed.manifest.res

     文件     721920  2010-01-31 12:34  my_ecc0\Debug\my_ecc.pdb

     文件      66560  2010-01-31 12:38  my_ecc0\Debug\vc60.idb

     文件      61440  2010-01-31 12:34  my_ecc0\Debug\vc60.pdb

     文件      27648  2009-04-01 18:45  my_ecc0\Debug\vc90.idb

     文件      45056  2009-04-01 18:45  my_ecc0\Debug\vc90.pdb

     文件     266289  2010-01-31 12:34  my_ecc0\Debug\my_ecc.exe

     文件     325424  2010-01-31 12:34  my_ecc0\Debug\my_ecc.pch

     文件      37760  2010-01-31 12:34  my_ecc0\Debug\my_ecc.obj

     文件     331832  2010-01-31 12:34  my_ecc0\Debug\my_ecc.ilk

     文件      50176  2010-01-31 12:38  my_ecc0\my_ecc.ncb

     文件      21205  2010-01-31 12:34  my_ecc0\my_ecc.cpp

     文件      54784  2010-01-31 12:38  my_ecc0\my_ecc.opt

     目录          0  2009-04-23 19:46  my_ecc0\Debug

     目录          0  2009-04-23 19:46  my_ecc0

----------- ---------  ---------- -----  ----

              2433814                    25


评论

共有 条评论