openssl在wince平台上的问题

whyandhow 2008-07-06 09:32:19
由于项目需要,分别在wince平台与winxp平台编译openssl库,xp平台上动静态库编译通过, 而且使用正确,但在wince平台上,出现了只能成功编译静态库,而且静态库在使用过程中还出现问题,可通过网上搜索以及阅读openssl自带的docs,readme文件,并没发现有什么bug,或者问题出现啊,难道是我自己编译的问题,求教,求救!

这是我写的一个dh测试程序,分别在wince和xp下运行,xp下获得的共享密钥相等,而wince下的不等,呵呵,由于本人水平有限,写得代码比较乱

/*本程序dh交换中,两端分别用x,y表示,其中x,gx分别为x端的私钥和公钥,y,gy分别表示y端的私钥和公钥,p为192字节的大素数,已定,g为基数,也是定值,为2*/


#include "testike.h"
#include <openssl/pem.h>
#include <openssl/bn.h>
#include <openssl/dh.h>
#include <assert.h>
#include <openssl/rand.h>
//初始化
static DH * _dh_init(const unsigned char * g, size_t glen,
const unsigned char * p, size_t plen,
const unsigned char * x, size_t xlen)
{
DH * dh;
assert(p && plen && g && glen && x && xlen);
dh = DH_new();
assert(dh);
dh->p=BN_bin2bn(p, plen, 0);
BN_is_prime(dh->p, 0,0,0,0);
//assert(BN_is_prime(dh->p, 0,0,0,0));
dh->g=BN_bin2bn(g, glen, 0);
dh->priv_key = BN_bin2bn(x, xlen, 0);
return dh;
}
//生成公钥
unsigned char* x4_dh_public(const unsigned char * g, size_t glen,
const unsigned char * p, size_t plen,
const unsigned char * x, size_t xlen)
{
DH * dh;
unsigned char *gx=(unsigned char *)malloc(192);


dh = _dh_init(g,glen, p,plen, x,xlen);
assert(dh);


DH_generate_key(dh);

BN_bn2bin(dh->pub_key, gx);

DH_free(dh);
return gx;
}
//生成共享密钥
unsigned char * x4_dh_shared(const unsigned char * g, size_t glen,
const unsigned char * p, size_t plen,
const unsigned char * x, size_t xlen,
const unsigned char * gx, size_t gxlen,
const unsigned char * gy, size_t gylen)
{
DH * dh;
BIGNUM * bn;
unsigned char *gxy=(unsigned char *)malloc(192);
assert(gx && gxlen && gy && gylen);
dh = _dh_init(g,glen, p,plen, x,xlen);
assert(dh);
dh->pub_key = BN_bin2bn(gx, gxlen, 0);
assert(dh->pub_key);
bn = BN_bin2bn(gy, gylen, 0);
assert(bn);
DH_compute_key(gxy, bn, dh);
DH_free(dh);
return gxy;
}


int _tmain(int argc, _TCHAR* argv[])
{
DH *dh;
unsigned char g[1],x[192],y[192];
unsigned char * gx;
unsigned char * shared1;
unsigned char * shared2;
unsigned char * gy;
unsigned char p[192]={
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC9,0x0F,0xDA,0xA2,
0x21,0x68,0xC2,0x34,0xC4,0xC6,0x62,0x8B,0x80,0xDC,0x1C,0xD1,
0x29,0x02,0x4E,0x08,0x8A,0x67,0xCC,0x74,0x02,0x0B,0xBE,0xA6,
0x3B,0x13,0x9B,0x22,0x51,0x4A,0x08,0x79,0x8E,0x34,0x04,0xDD,
0xEF,0x95,0x19,0xB3,0xCD,0x3A,0x43,0x1B,0x30,0x2B,0x0A,0x6D,
0xF2,0x5F,0x14,0x37,0x4F,0xE1,0x35,0x6D,0x6D,0x51,0xC2,0x45,
0xE4,0x85,0xB5,0x76,0x62,0x5E,0x7E,0xC6,0xF4,0x4C,0x42,0xE9,
0xA6,0x37,0xED,0x6B,0x0B,0xFF,0x5C,0xB6,0xF4,0x06,0xB7,0xED,
0xEE,0x38,0x6B,0xFB,0x5A,0x89,0x9F,0xA5,0xAE,0x9F,0x24,0x11,
0x7C,0x4B,0x1F,0xE6,0x49,0x28,0x66,0x51,0xEC,0xE4,0x5B,0x3D,
0xC2,0x00,0x7C,0xB8,0xA1,0x63,0xBF,0x05,0x98,0xDA,0x48,0x36,
0x1C,0x55,0xD3,0x9A,0x69,0x16,0x3F,0xA8,0xFD,0x24,0xCF,0x5F,
0x83,0x65,0x5D,0x23,0xDC,0xA3,0xAD,0x96,0x1C,0x62,0xF3,0x56,
0x20,0x85,0x52,0xBB,0x9E,0xD5,0x29,0x07,0x70,0x96,0x96,0x6D,
0x67,0x0C,0x35,0x4E,0x4A,0xBC,0x98,0x04,0xF1,0x74,0x6C,0x08,
0xCA,0x23,0x73,0x27,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
};
g[0]=2;
//初始化
SSLeay_add_all_algorithms();
RAND_poll();
//获得私钥
RAND_bytes(x, 192);//x端私钥(随机数)
RAND_bytes(y, 192);//y端私钥(随机数)

//计算获得公钥
gx=x4_dh_public(g,1,p,192,x,192);//x端公钥
gy=x4_dh_public(g,1,p,192,y,192);//y端公钥
shared1=x4_dh_shared(g,1,p,192,x,192,gx,192,gy,192);//共享密钥一
shared2=x4_dh_shared(g,1,p,192,y,192,gy,192,gx,192);//共享密钥二
if(memcmp(shared1,shared2,192)!=0)
{
printf("生成共享密钥失败\n");
return -1;
}
printf("生成共享密钥成功");
return 0;
}
...全文
412 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
whyandhow 2008-08-01
  • 打赏
  • 举报
回复
谢谢,问题已经查出来了,是openssl的dh算法的问题,而具体到内部函数,我怀疑是g的x次方计算的问题,现在我将dh算法替换成另一个加解密包的dh算法,已经连通了,美中不足的是这个加密包的dh算法速度明显低于openssl,也只能将就了,谢谢关注:)
suffixalias 2008-07-27
  • 打赏
  • 举报
回复
我以前遇到过unix平台下产生rsa密钥失败,是那个平台随机数产生函数的问题,你这个没遇到过
不知道是否和随机数有关。
课程简介    随着”新基建“的推行,其中涉及到的工业互联网、物联网、人工智能、云计算、区块链,无一不是与安全相关,所有数据的存储、传输、签名认证都涉及到密码学技术,所以在这样的大环境下再结合我多年安全开发经验,设计出这门课程。    因为密码学技术在新基建中的重要性,所以使其成为底层开发人员所必备的技能。特别是现在的区块链技术是全面应用密码学,大数据技术和人工智能技术也要解决隐私安全问题。所以现在学习相关技术是非常必要的技术储备,并且可以改造现有的系统,提升其安全性。课程学习目标了解DES算法原理VS2019创建C++项目,并导入openssl库学会OpenSSL DES算法加解密接口加密文件并做PKCS7 Padding 数据填充解密数据并做数据填充解析课程特点    面向工程应用    市面上的一些密码学课程和密码学的书籍,很多都是从考证出发,讲解算法原理并不面向工程应用,而我们现在缺少的是工程应用相关的知识,本课程从工程应用出发,每种技术都主要讲解其在工程中的使用,并演示工程应用的代码。    从零实现部分算法    课程中实现了base16编解码 ,XOR对称加解密算法,PKCS7 pading数据填充算法,通过对一些简单算法的实现,从而加深对密码学的理解。    理论与实践结合    课程如果只是讲代码,同学并不能理解接口背后的原理,在项目设计中就会留下隐患,出现错误也不容易排查出问题。    如果只讲理论,比如对密码学的一些研究,对于大部分从事工程应用的同学并没有必要,而是理论与实践结合,一切为了工程实践。    代码现场打出    代码不放在ppt而是现场打出,更好的让学员理解代码编写的逻辑,老师现场敲出代码正是展示出了工程项目的思考,每个步骤为什么要这么做,考虑了哪些异常,    易学不枯燥    课程为了确保大部分人开发者都学得会,理解算法原理(才能真正理解算法特性),学会工程应用(接口调用,但不局限接口调用,理解接口背后的机制,并能解决工程中会出现的问题),阅读算法源码但不实现密码算法,,并能将密码学投入到实际工程中,如果是想学习具体的加密算法实现,请关注我后面的课程。课程用到的技术    课程主要演示基于 VS2019 C++,部分演示基于ubuntu 18.04 GCC makefile    如果没有装linux系统,对本课程的学习也没有影响    课程中的OpenSSL基于最新的3.0版本,如果是openss 1.1.1版本也支持,再低的版本不支持国密算法。 课程常见问题课程讲解用的什么平台和工具?    课程演示主要在windows,基于VS2019 ,一些项目会移植到Linux在ubuntu18.04上我不会Linux能否学习本门课程?    可以的,课程主要在Windows上,Linux部分只是移植,可以暂时跳过,熟悉了Linux再过来看我不会C/C++ 语言是否能学习本门课程?    至少要会C语言,C++特性用得不多,但做了一个封装,可以预习一些C++基础。会不会讲算法实现,会不会太难学不会?    课程偏工程应用,具体的AES,椭圆曲线、RSA等算法只通过图示讲原理,一些简单hash算法会读一些源码,并不去实现,课程中会单独实现简洁的XOR对称加密和base16算法(代码量不大易懂)。其他的应用我们都基于OpenSSL3.0的SDK调用算法。课程提供源码和PPT吗?    课程中所有讲解的源码都提供,课程的上课的ppt也提供,PPT提供pdf版,只可以用于学习,不得商用,代码可以用于商用软件项目,涉及到开源系统部分,需要遵守开源的协议,但不得用于网络教学。要观看全部内容请点击c++实战区块链核心密码学-基于opensslhttps://edu.csdn.net/course/play/29593

4,451

社区成员

发帖
与我相关
我的任务
社区描述
云计算 云安全相关讨论
社区管理员
  • 云安全社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧