资源简介
ECDH 密钥交换算法程序,程序内含有调用大数求公钥,私钥求取,私钥计算。
代码片段和文件信息
// ECDH.cpp : 定义控制台应用程序的入口点。
//
#include “stdafx.h“
#include
#include
#include
#include
#include
#include
#include
#define ECDH_SIZE 67
#define MALLOC_SIZE 0x400u
#pragma warning(disable:4996)
using namespace std;
/*hex转bin*/
int String2Buffer(unsigned char* src int srclen unsigned char* dest) {
int i = 0;
if (srclen % 2 != 0) return 0;
for (i = 0; i < srclen / 2; i++)
{
char tmp[3];
tmp[0] = *(src + 2 * i);
tmp[1] = *(src + 2 * i + 1);
tmp[2] = 0;
int out = 0;
sscanf(tmp “%x“ &out);
unsigned char ch = (unsigned char)out;
*(dest + i) = ch;
}
return i;
}
/*bin转hex*/
int Buffer2String(unsigned char* src int srclen unsigned char* dest) {
int i;
for (i = 0; i < srclen; i++)
{
char tmp[3] = { 0 };
sprintf(tmp “%x“ *(src + i));
if (strlen(tmp) == 1) {
strcat((char*)dest “0“);
strncat((char*)dest tmp 1);
}
else if (strlen(tmp) == 2) {
strncat((char*)dest tmp 2);
}
else {
strcat((char*)dest “00“);
}
}
return i * 2;
}
/*16进制展示数据*/
static void display(const char *tripstr const char *src const int src_size)
{
int i = 0;
if (tripstr != NULL) {
printf(“%s“ tripstr);
}
unsigned char*tmp = (unsigned char*)malloc(MALLOC_SIZE);
memset(tmp 0 MALLOC_SIZE);
Buffer2String((unsigned char*)src src_size tmp);
cout << tmp << endl;
free(tmp);
}
static int Gen_ECDH_Key(string *s1 string *publickey string *privatekey string *sharedkey) {
string str1 = *s1;
string str2 = *publickey;
string str3 = *privatekey;
bool isNeed23 = false;//是否需要第2 3个参数
if (str1.length() == 0) {
//第一个参数不能空
printf(“第一个参数不能空\n“);
return -0x10;
}
if (isNeed23) {
//检测第23个参数
if (str2.length() == 0) {
printf(“str2 null\n“);
return -0x12;
}
if (str3.length() == 0) {
printf(“str3 null\n“);
return -0x13;
}
}
EC_KEY *eckey = EC_KEY_new();
eckey = EC_KEY_new_by_curve_name(NID_secp192k1);//711
if (!eckey) {
printf(“eckey null\n“);
return -0x7;
}
if (str3.length() > 0) {
//str3不为空
printf(“private key!=null gen sharekey\n“);
BIGNUM *big = BN_new();
unsigned char *sout3 = (unsigned char*)malloc(MALLOC_SIZE);
memset(sout3 0 MALLOC_SIZE);
int len3 = String2Buffer((unsigned char*)str3.c_str() str3.length() sout3);
BN_mpi2bn(sout3 len3 big);
if (!big) {
printf(“big null“);
return -0x5;
}
char *p = BN_bn2hex(big);
if (p)
{
printf(“set prikey is 0x%s\n“ p);
OPENSSL_free(p);//释放p
free(sout3);//释放 sout3
}
int r = EC_KEY_set_private_key(eckey big);
printf(“r=%d\n“ r);
BN_free(big);//释放
if (r != 1) {
printf(“EC_KEY_set_private_key Failed~\n“);
return -0x1;
}
const EC_GROUP *group = EC_KEY_get0_group(eckey);
EC_POINT *point = EC_POINT_new(group);
if (str2.length() > 0) {
unsigned char *st
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 60928 2018-06-21 08:29 ECDH\ECDH\Debug\ECDH.exe
文件 693644 2018-06-21 08:29 ECDH\ECDH\Debug\ECDH.ilk
文件 1027072 2018-06-21 08:29 ECDH\ECDH\Debug\ECDH.pdb
文件 1114112 2011-03-15 19:46 ECDH\ECDH\Debug\libeay32.dll
文件 2906 2018-06-21 08:29 ECDH\ECDH\ECDH\Debug\cl.command.1.tlog
文件 43100 2018-06-21 08:29 ECDH\ECDH\ECDH\Debug\CL.read.1.tlog
文件 1624 2018-06-21 08:29 ECDH\ECDH\ECDH\Debug\CL.write.1.tlog
文件 406 2017-11-16 11:26 ECDH\ECDH\ECDH\Debug\ECDH.exe.em
文件 472 2018-05-03 15:22 ECDH\ECDH\ECDH\Debug\ECDH.exe.em
文件 381 2018-06-21 08:29 ECDH\ECDH\ECDH\Debug\ECDH.exe.intermediate.manifest
文件 91 2018-06-21 08:29 ECDH\ECDH\ECDH\Debug\ECDH.lastbuildstate
文件 946 2018-06-21 08:29 ECDH\ECDH\ECDH\Debug\ECDH.log
文件 157107 2018-06-21 08:29 ECDH\ECDH\ECDH\Debug\ECDH.obj
文件 1179648 2018-05-03 15:22 ECDH\ECDH\ECDH\Debug\ECDH.pch
文件 198 2017-11-16 11:26 ECDH\ECDH\ECDH\Debug\ECDH_manifest.rc
文件 2 2018-06-21 08:29 ECDH\ECDH\ECDH\Debug\li
文件 2 2018-06-21 08:29 ECDH\ECDH\ECDH\Debug\li
文件 2 2018-06-21 08:29 ECDH\ECDH\ECDH\Debug\li
文件 2 2018-06-21 08:29 ECDH\ECDH\ECDH\Debug\li
文件 2 2018-06-21 08:29 ECDH\ECDH\ECDH\Debug\li
文件 2 2018-06-21 08:29 ECDH\ECDH\ECDH\Debug\li
文件 2 2018-06-21 08:29 ECDH\ECDH\ECDH\Debug\li
文件 2 2018-06-21 08:29 ECDH\ECDH\ECDH\Debug\li
文件 2 2018-06-21 08:29 ECDH\ECDH\ECDH\Debug\li
文件 2 2018-06-21 08:29 ECDH\ECDH\ECDH\Debug\li
文件 2 2018-06-21 08:29 ECDH\ECDH\ECDH\Debug\li
文件 2 2018-06-21 08:29 ECDH\ECDH\ECDH\Debug\li
文件 2 2018-06-21 08:29 ECDH\ECDH\ECDH\Debug\li
文件 2 2018-06-21 08:29 ECDH\ECDH\ECDH\Debug\li
文件 2 2018-06-21 08:29 ECDH\ECDH\ECDH\Debug\li
............此处省略37个文件信息
- 上一篇:基于STM32设计的无线遥控器
- 下一篇:一个仿豆瓣的网站
相关资源
- 数学建模算法与应用司守奎
- 基于遗传算法的机场终端区飞机排序
- 基于深度神经网络的语音分离算法
- 算法导论22章课后习题答案
- 数据结构与算法图解.pdf
- 数学建模10大算法详解_程序源码打包
- 基于协同过滤算法的电影推荐系统
- SURF算法的图像拼接和快速拼接算法
- 李春葆 算法设计与分析第2版课件 、
- 算法神探:一口气读完的算法小说高
- 捷联惯导算法与组合导航原理讲义(
- Algorithms Illuminated Part 3_ Greedy Algorith
- 捷联惯导算法与组合导航原理_严恭敏
- Computational Geometry in C-Second Edition
- MapReduce实现矩阵相乘算法
- 2015-9-虹软校招内推笔试题-算法岗
- 水面无人艇局部危险避障算法研究 答
- 论文研究-基于ISAP的D2D资源分配优化算
- 论文研究-基于QR分解的Contourlet域抗几
- Computational+Geometry+-+Algorithms+and+Applic
- 光线跟踪算法
- 算法设计与分析基础课后习题答案中
- Algorithm Design127255
- Introduction.to.Algorithms(算法导论第三版
- 基于遗传算法的二维排样算法研究
- 基于LMS自适应滤波器均衡设计
- 通俗易懂的遗传算法入门.ppt
- 高效算法:竞赛、应试与提高必修1
- 蚱蜢优化算法
- Introduction to the design and analysis of alg
评论
共有 条评论