椭圆曲线签名和校验.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
椭圆曲线签名和校验

OpenSSL: 椭圆曲线签名与校验 (ECDSA) /* 目录: -------------------- 1. 简介 2. 生成 ECDSA 密钥对 3. 签名 4. 校验 */ /* 1. 简介 -------------------- 对 PE 文件做 ECDSA 签名. 签名写入 PE 头部 DOS Stub代码后边. 使用的椭圆 曲线是 FIPS 186-2 中的 P-192. 签名长度不超过 56 字节,强度和 RSA 1024 相当. */ /* 2. 生成 ECDSA 密钥对 生成的私钥用 RC4 加密. 生成形式为 c 语言可用的形式. */ #include stdio.h #include openssl/crypto.h #include openssl/bio.h #include openssl/evp.h #include openssl/x509.h #include openssl/ecdsa.h #include openssl/engine.h #include openssl/err.h #include openssl/rc4.h #include conio.h #define MAXPASS 64 #define PRIVKEY static unsigned char privkey[%d] = { #define PUBKEY static const unsigned char pubkey[%d] = { #define ENDKEY \n};\n int main(int argc, char* argv[]) { RC4_KEY rc4; EC_KEY *ecdsa; char passbuf[MAXPASS + 3] = {MAXPASS}; char *pass; byte buf[1024]; byte *pp; int i,len; printf(Input password: ); pass = _cgets(passbuf); if (*pass == \0 || passbuf[1] == 0) { printf(NULL password\n); return -1; } RAND_seed(passbuf,sizeof(passbuf)); if ( (ecdsa = EC_KEY_new()) == NULL) { printf(EC_KEY_new\n); return 0; } if ((ecdsa-group = EC_GROUP_new_by_nid(NID_X9_62_prime192v1)) == NULL) { printf(EC_GROUP_new_by_nid\n); goto err; } if (!EC_KEY_generate_key(ecdsa)) { printf(EC_KEY_generate_key error\n); goto err; } /* * 生成 RC4 加密的ECDSA私钥 */ pp = buf; len = i2d_ECPrivateKey(ecdsa,pp); if (!len) { goto err; } RC4_set_key(rc4,strlen(pass),(byte*)pass); RC4(rc4,len,buf,buf); printf(PRIVKEY,len); for (i=0; ilen; i++) { if ( !(i % 8) ) printf(\n); printf(0x%02X , ,buf); } printf(ENDKEY); /* * 生成ECDSA公钥 */ pp = buf; len = ECPublicKey_get_octet_string(ecdsa,pp); if (!len) { goto err; } printf(PUBKEY,len); for (i=0; ilen; i++) { if ( !(i % 8) ) printf(\n); printf(0x%02X , ,buf); } printf(ENDKEY); err: EC_KEY_free(ecdsa); return 0; } /* 3. 签名 ------------------- 签名时需要输入私钥密码 (最长 512 位). */ #include openssl/crypto.h #include openssl/bio.h #include openssl/evp.h

文档评论(0)

3471161553 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档