⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ecc_makekey.cpp

📁 该压缩包中包括 tom的加密函数库及pdf说明 ,以及Rinick s ECC:椭圆曲线非对称加密密钥生成器
💻 CPP
字号:
//密钥生成器源文件

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <tomcrypt.h>
#pragma link "tomcrypt.lib"

int main(int argc, char* argv[])
{



    printf("Rinick 椭圆曲线密钥生成器,程序使用tomcrypt加密函数库\n\n");

    if(fopen("private_key.c", "rb")!=NULL){
        printf("错误!\nprivate_key.c已存在,为了防止误删,请手动删除\n\n");
        system("pause");
        return 0;
    }


    char tempChar[90];

    //随机数状态初始化
    int pn=register_prng(&rc4_desc);//随机数生成方式,可以选择其他方式,参考crypt.pdf第56页
    prng_state tg;
    prng_descriptor[pn].start(&tg);

    printf("输入一些内容来扰乱随机数,输入0系统会自动分配随机数\n?:");
    scanf("%64s",tempChar);
    if(tempChar[0]=='0' && tempChar[1]==0){

        int getrand;
        prng_descriptor[pn].add_entropy((char*)&getrand,2,&tg);
        for(int i=0;i<5;++i){
            srand(time(NULL));
            for(int j=0;j<5;++j){
                getrand=rand();
                prng_descriptor[pn].add_entropy((char*)&getrand,2,&tg);
            }
        }

    }else{
        while(tempChar[0]!='0' || tempChar[1]!=0){
            prng_descriptor[pn].add_entropy(tempChar,strlen(tempChar),&tg);
            printf("你还可以继续输入来增加随机性,输入0终止初始化\n?:");
            scanf("%64s",tempChar);
        }
    }
    prng_descriptor[pn].ready(&tg);

    int ecclen;
    printf("\n\n选择椭圆曲线\n可以是192,224,256,384,521\n?:");
    scanf("%d",&ecclen);
    ecclen/=8;
		if(ecclen>65)ecclen=65;

    ecc_key ekey1;
    ecc_make_key(&tg,pn,ecclen,&ekey1);

    FILE *out=fopen("private_key.c", "wt");


    fputs("ltc_ecc_mykey.type=PK_PRIVATE;\n",out);
    fprintf(out,"ltc_ecc_mykey.idx=%d;\n",ekey1.idx);
    fputs("mp_init_multi(&ltc_ecc_mykey.pubkey.x, &ltc_ecc_mykey.pubkey.y, &ltc_ecc_mykey.pubkey.z, &ltc_ecc_mykey.k, NULL);\n",out);

    mp_toradix (&ekey1.pubkey.x, tempChar, 64);
    fprintf(out,"mp_read_radix(&ltc_ecc_mykey.pubkey.x, \"%s\", 64);\n",tempChar);

    mp_toradix (&ekey1.pubkey.y, tempChar, 64);
    fprintf(out,"mp_read_radix(&ltc_ecc_mykey.pubkey.y, \"%s\", 64);\n",tempChar);

    fputs("mp_set(&ltc_ecc_mykey.pubkey.z, 1);\n",out);

    mp_toradix (&ekey1.k, tempChar, 64);
    fprintf(out,"mp_read_radix(&ltc_ecc_mykey.k, \"%s\", 64);\n",tempChar);

    fclose(out);

    out=fopen("public_key.c", "wt");


    fputs("ltc_ecc_mykey.type=PK_PUBLIC;\n",out);
    fprintf(out,"ltc_ecc_mykey.idx=%d;\n",ekey1.idx);
    fputs("mp_init_multi(&ltc_ecc_mykey.pubkey.x, &ltc_ecc_mykey.pubkey.y, &ltc_ecc_mykey.pubkey.z, &ltc_ecc_mykey.k, NULL);\n",out);

    mp_toradix (&ekey1.pubkey.x, tempChar, 64);
    fprintf(out,"mp_read_radix(&ltc_ecc_mykey.pubkey.x, \"%s\", 64);\n",tempChar);

    mp_toradix (&ekey1.pubkey.y, tempChar, 64);
    fprintf(out,"mp_read_radix(&ltc_ecc_mykey.pubkey.y, \"%s\", 64);\n",tempChar);

    fputs("mp_set(&ltc_ecc_mykey.pubkey.z, 1);\n",out);
		fputs("mp_set(&ltc_ecc_mykey.k, 0);\n",out);
    fclose(out);
    printf("\n你的密钥信息保存在private_key.c中,公钥信息保存在public_key.c,请将这两个文件复制到工程目录下并妥善备份\n\n");

    system("pause");
    return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -