导读
很少有人用VS2015做基于PBC的开发,一些书籍的配置还是基于VC6.0。但是在使用过程中,VC6.0有各种不方便,例如没有代码提示功能,没有行号,没法实现代码块的折叠等各种问题!
为此,折腾了好久,借鉴了之前在VS2015中配置其他库的经验,终于实现了在VS2015上配置并使用PBC库。总结一份教程,分享给大家。
1
预备工作
首先我们先来了解一下PBC和OpenSSL。
1、PBC库介绍
PBC库的全称为:The Pairing-Based Cryptography Library,即,基于配对的密码学库。
官网为:
https://crypto.stanford.edu/pbc/
PBC库是一个非常经典的密码学基础库,主要是用于做配对密码学编程。目前PBC已经有多个编程语言的实现了。其中用于Java的又一个独立的名字叫JPBC。
本篇文章我们讲解的是C语言开发的相关环境配置,所以我们讲解PBC库相关内容。
2、OpenSSL介绍
SSL是Secure Sockets Layer的缩写,即安全套接层协议。可以在Internet上提供秘密性传输。
OpenSSL是一个开放源代码的软件库包,应用程序可以使用这个包来进行安全通信,避免窃听,同时确认另一端连接者的身份。
OpenSSL还有一个很重要的就是他封装了很多密码学的库,可以实现很多密码学代码,我们今天要安装的PBC库,就是基于OpenSSL,所以我们也要配置OpenSSL。
OpenSSL的官网为:
https://www.openssl.org/
3、下载
大家可以去官网下载对应的包,也可以在公众号回复:PBC或pbc获取相关的包。
其中包括两个版本的PBC库和OpenSSL包。具体安装配置的时候,选择其中一个PBC库即可。
2
配置教程
1、项目创建
将PBC库解压到某个文件夹下:
然后我们打开VS2015,选择打开项目:
然后打开PBCVC文件夹下的PBCVC.dsw文件:
它会提示:
我们点击确定。成功后会弹出迁移报告:
注意:在之后,我们就可以使用sln文件打开这个项目了。
然后此时我们可以选择重新生成解决方案。会出如下问题:
具体解决方案请看最后一部分。
2、PBC相关
bib文件中的内容一般都要我们去找到相关的信息,自己补进来了。
我们打开“项目”下的“属性”(或者“调试”下的“PBCVC属性”),是如下界面:
首先我们的配置和平台,要选择Debug和Win32:
配置大家也可以尝试使用release,但是平台要选Win32,因为PBC库实在是太老啦,不支持64。
然后我们选择VC++目录:
在包含目录中,添加如下路径:
...\PBCVC\self-compiled
省略号是你的解压路径,例如:
在下面的库目录中,也同样将这个路径放进去:
然后我们打开链接器下面的输入,并打开附加依赖项,添加gmp.lib。这个文件是在上面刚添加的库目录下的。
然后点击确定或应用,关闭。
如果我们没有配置这个,就会报错:
2、OpenSSL配置
接下来我们需要配置OpenSSL。
我们解压缩OpenSSL:
我们复制include文件夹的路径,并将其添加到包含目录中:
我们复制lib下的x86文件夹的路径,并将其添加到库目录中:
最后我们打开链接器下面的输入,并打开附加依赖项,添加libcrypto.lib和libssl.lib。
其中这两个文件是在上面刚添加的库目录下的。
然后点击确定或应用,关闭。
然后我们重新生成解决方案,会报如下错误:
具体解决方案,请看后面。
3
环境测试
1、创建c文件
我们在resource Files下面创建一个main.c的文件
在文件中写如下代码:
#include<pbc.h>
#include<pbc_time.h>
element_t data;
int main(void)
{
pairing_t pairing;
a_param_input(pairing);
element_init_GT(data, pairing);
element_random(data); //生成随机数据
element_printf("【数据】 = %B\n", data);
return 0;
}
2、执行与报错解决
上面的代码执行过程中还会出错,我们执行代码,会报错如下:
我们打开Source Files找到testpairing.c。然后找到这个函数中的main函数,将函数名改为其他名字。
然后我们再执行代码就没有问题了,输出如下:
4
常见问题解决方案汇总
最后我们来汇总一下这个过程中出现的各种问题及解决方案吧!
1、“/ZI”和“/Gy-”命令行选项不兼容
在生成解决方案的时候,会报如下错误:
“/ZI”和“/Gy-”命令行选项不兼容
具体如下:
解决方案如下:
打开“项目”下的“属性”(或者“调试”下的“PBCVC属性”)然后我们打开C/C++下面的常规,在右面的调试信息格式选择“程序数据库(/Zi)”或“无”。然后点击确定或应用,关闭。
再次编译后,就没有问题啦!
2、无法打开包括文件“gmp.h”
因为没有做好相关的配置,具体请看第二部分有关于PBC库的配置即可解决。
3、函数“int snprintf(...)”已有主体
这个报错的具体内容为:
函数“int snprintf(char *const ,const std::size_t,const char *const ,...)”已有主体
这个时候我们双击这个报错的地方,然后,会打开extend_printf.c文件,我们将snprintf函数注释掉:
这个报错就解决啦!
4、模块对于 SAFESEH 映像是不安全的
这个报错有多个地方:
这个需要我们配置一下VS2015:
打开“项目”下的“属性”(或者“调试”下的“PBCVC属性”)然后我们打开链接器下面的命令行,并在下面的其它选项空白的地方添加:/SAFESEH:NO。然后点击确定或应用,关闭。
5、无法打开文件“LIBC.lib”
这个报错主要是因为我们把一个低版本编译的项目用到了高版本的VS编译器中。(原项目是用VC++6.0搞的)
我们打开“项目”下的“属性”(或者“调试”下的“PBCVC属性”)然后我们打开链接器下面的输入,选择忽略特定默认库,然后添加LIBC.lib。然后点击确定或应用,关闭。
6、找到一个或多个多重定义的符号
这个错会显示两个报错信息,分别如下:
这个错误是因为代码中有重定义的符号,一般来说都是函数命名重复(命名重复并不一定会出现这个报错,如重载),并且最常见的就是主函数。
对于我们的这个程序,因为原PBC中已经有了main函数,我们再自己定义main函数就会报错,所以我们需要改变原有的main函数的名称,以防止冲突。
我们打开Source Files找到testpairing.c。然后找到这个函数中的main函数,将函数名改为其他名字。
然后我们再执行代码就没有问题了
长按二维码关注