资源简介
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设计的无线遥控器
- 下一篇:一个仿豆瓣的网站
相关资源
- SVR算法程序可运行
- 计算机图形学 边填充算法实现代码
- 福建师范大学历年算法考卷
- 栈的实现及应用,六种基本算法
- Bresenham算法绘制线段并利用“橡皮筋
- 介绍几种压缩算法及《笨笨数据压缩
- 改进的BP神经网络算法
- A星算法_原理讲解_例子
- 云模型的相关算法cloud
- 旋转矩阵求欧拉角的简单算法
- 栅栏填充算法源码(VC)
- RSA算法源码
- 关联分析Apriori算法实现
- [免费]relax算法成像
- 操作系统 LRU算法 实验报告 及 程序代
- 分治法快速排序算法QuickSort C
- 现代谱估计算法 music ESPRIT 谐波分解
- MUSIC算法c 实现
- 007出纳管理系统 v7[1].5.94 算法注册机
- 克鲁斯卡尔算法C和C 实现代码
- capon波束形成算法-VC实现
- QGA 量子遗传算法
- 利用OpenGL写毛笔字算法
- 带头结点的单链表的c算法实现
- 自适应隐写算法wow
- 协同过滤算法源码
- RSA AES DES ECC加密算法源码
- 密码学课程设计:DES加密解密算法的
- 北航人工智能原理课大作业源代码,
- A*算法的2D演示(带源码)
评论
共有 条评论