首页 > 其他分享 >PBC教程 | 超详细图解—如何在VS2015中配置PBC库(附密码学常用库的下载)

PBC教程 | 超详细图解—如何在VS2015中配置PBC库(附密码学常用库的下载)

时间:2022-12-27 22:35:53浏览次数:44  
标签:函数 VS2015 OpenSSL 报错 PBC 打开 密码学 我们


导读



很少有人用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、下载


大家可以去官网下载对应的包,也可以在公众号回复:PBCpbc获取相关的包。


其中包括两个版本的PBC库和OpenSSL包。具体安装配置的时候,选择其中一个PBC库即可。


2

配置教程



1、项目创建


将PBC库解压到某个文件夹下:


PBC教程 | 超详细图解—如何在VS2015中配置PBC库(附密码学常用库的下载)_main函数


然后我们打开VS2015,选择打开项目:


PBC教程 | 超详细图解—如何在VS2015中配置PBC库(附密码学常用库的下载)_bc_02


然后打开PBCVC文件夹下的PBCVC.dsw文件:


PBC教程 | 超详细图解—如何在VS2015中配置PBC库(附密码学常用库的下载)_bc_03


它会提示:


PBC教程 | 超详细图解—如何在VS2015中配置PBC库(附密码学常用库的下载)_main函数_04


我们点击确定。成功后会弹出迁移报告:


PBC教程 | 超详细图解—如何在VS2015中配置PBC库(附密码学常用库的下载)_解决方案_05


注意:在之后,我们就可以使用sln文件打开这个项目了。


然后此时我们可以选择重新生成解决方案。会出如下问题:


PBC教程 | 超详细图解—如何在VS2015中配置PBC库(附密码学常用库的下载)_bc_06


具体解决方案请看最后一部分。


2、PBC相关


bib文件中的内容一般都要我们去找到相关的信息,自己补进来了。


我们打开“项目”下的“属性”(或者“调试”下的“PBCVC属性”),是如下界面:


PBC教程 | 超详细图解—如何在VS2015中配置PBC库(附密码学常用库的下载)_bc_07


首先我们的配置平台,要选择Debug和Win32:


PBC教程 | 超详细图解—如何在VS2015中配置PBC库(附密码学常用库的下载)_main函数_08


配置大家也可以尝试使用release,但是平台要选Win32,因为PBC库实在是太老啦,不支持64。


然后我们选择VC++目录


PBC教程 | 超详细图解—如何在VS2015中配置PBC库(附密码学常用库的下载)_bc_09


在包含目录中,添加如下路径:


...\PBCVC\self-compiled


省略号是你的解压路径,例如:


PBC教程 | 超详细图解—如何在VS2015中配置PBC库(附密码学常用库的下载)_解决方案_10


在下面的库目录中,也同样将这个路径放进去:


PBC教程 | 超详细图解—如何在VS2015中配置PBC库(附密码学常用库的下载)_main函数_11


然后我们打开链接器下面的输入,并打开附加依赖项,添加gmp.lib。这个文件是在上面刚添加的库目录下的。


PBC教程 | 超详细图解—如何在VS2015中配置PBC库(附密码学常用库的下载)_解决方案_12


然后点击确定应用,关闭。


如果我们没有配置这个,就会报错:


PBC教程 | 超详细图解—如何在VS2015中配置PBC库(附密码学常用库的下载)_bc_13


2、OpenSSL配置


接下来我们需要配置OpenSSL。


我们解压缩OpenSSL:


PBC教程 | 超详细图解—如何在VS2015中配置PBC库(附密码学常用库的下载)_bc_14


我们复制include文件夹的路径,并将其添加到包含目录中:


PBC教程 | 超详细图解—如何在VS2015中配置PBC库(附密码学常用库的下载)_解决方案_15


我们复制lib下的x86文件夹的路径,并将其添加到库目录中:


PBC教程 | 超详细图解—如何在VS2015中配置PBC库(附密码学常用库的下载)_解决方案_16


最后我们打开链接器下面的输入,并打开附加依赖项,添加libcrypto.liblibssl.lib


PBC教程 | 超详细图解—如何在VS2015中配置PBC库(附密码学常用库的下载)_bc_17


其中这两个文件是在上面刚添加的库目录下的。


PBC教程 | 超详细图解—如何在VS2015中配置PBC库(附密码学常用库的下载)_main函数_18


然后点击确定应用,关闭。


然后我们重新生成解决方案,会报如下错误:


PBC教程 | 超详细图解—如何在VS2015中配置PBC库(附密码学常用库的下载)_main函数_19


具体解决方案,请看后面。


3

环境测试



1、创建c文件


我们在resource Files下面创建一个main.c的文件


PBC教程 | 超详细图解—如何在VS2015中配置PBC库(附密码学常用库的下载)_main函数_20


在文件中写如下代码:


#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、执行与报错解决


上面的代码执行过程中还会出错,我们执行代码,会报错如下:


PBC教程 | 超详细图解—如何在VS2015中配置PBC库(附密码学常用库的下载)_解决方案_21


我们打开Source Files找到testpairing.c。然后找到这个函数中的main函数,将函数名改为其他名字。


PBC教程 | 超详细图解—如何在VS2015中配置PBC库(附密码学常用库的下载)_解决方案_22


然后我们再执行代码就没有问题了,输出如下:


PBC教程 | 超详细图解—如何在VS2015中配置PBC库(附密码学常用库的下载)_解决方案_23


4

常见问题解决方案汇总 



最后我们来汇总一下这个过程中出现的各种问题及解决方案吧!


1、“/ZI”和“/Gy-”命令行选项不兼容


在生成解决方案的时候,会报如下错误:


“/ZI”和“/Gy-”命令行选项不兼容


具体如下:


PBC教程 | 超详细图解—如何在VS2015中配置PBC库(附密码学常用库的下载)_bc_24


解决方案如下:


打开“项目”下的“属性”(或者“调试”下的“PBCVC属性”)然后我们打开C/C++下面的常规,在右面的调试信息格式选择“程序数据库(/Zi)”或“”。然后点击确定应用,关闭。



PBC教程 | 超详细图解—如何在VS2015中配置PBC库(附密码学常用库的下载)_解决方案_25


再次编译后,就没有问题啦!


2、无法打开包括文件“gmp.h”


因为没有做好相关的配置,具体请看第二部分有关于PBC库的配置即可解决。


3、函数“int snprintf(...)”已有主体


这个报错的具体内容为:


函数“int snprintf(char *const ,const std::size_t,const char *const ,...)”已有主体


PBC教程 | 超详细图解—如何在VS2015中配置PBC库(附密码学常用库的下载)_main函数_19


这个时候我们双击这个报错的地方,然后,会打开extend_printf.c文件,我们将snprintf函数注释掉:


PBC教程 | 超详细图解—如何在VS2015中配置PBC库(附密码学常用库的下载)_解决方案_27


这个报错就解决啦!


4、模块对于 SAFESEH 映像是不安全的


这个报错有多个地方:


PBC教程 | 超详细图解—如何在VS2015中配置PBC库(附密码学常用库的下载)_解决方案_28


这个需要我们配置一下VS2015:


打开“项目”下的“属性”(或者“调试”下的“PBCVC属性”)然后我们打开链接器下面的命令行,并在下面的其它选项空白的地方添加:/SAFESEH:NO。然后点击确定应用,关闭。


PBC教程 | 超详细图解—如何在VS2015中配置PBC库(附密码学常用库的下载)_bc_29


5、无法打开文件“LIBC.lib”


这个报错主要是因为我们把一个低版本编译的项目用到了高版本的VS编译器中。(原项目是用VC++6.0搞的)


我们打开“项目”下的“属性”(或者“调试”下的“PBCVC属性”)然后我们打开链接器下面的输入,选择忽略特定默认库,然后添加LIBC.lib。然后点击确定应用,关闭。


PBC教程 | 超详细图解—如何在VS2015中配置PBC库(附密码学常用库的下载)_解决方案_30


6、找到一个或多个多重定义的符号


这个错会显示两个报错信息,分别如下:


PBC教程 | 超详细图解—如何在VS2015中配置PBC库(附密码学常用库的下载)_解决方案_21


这个错误是因为代码中有重定义的符号,一般来说都是函数命名重复(命名重复并不一定会出现这个报错,如重载),并且最常见的就是主函数。


对于我们的这个程序,因为原PBC中已经有了main函数,我们再自己定义main函数就会报错,所以我们需要改变原有的main函数的名称,以防止冲突


我们打开Source Files找到testpairing.c。然后找到这个函数中的main函数,将函数名改为其他名字。


PBC教程 | 超详细图解—如何在VS2015中配置PBC库(附密码学常用库的下载)_解决方案_22


然后我们再执行代码就没有问题了


PBC教程 | 超详细图解—如何在VS2015中配置PBC库(附密码学常用库的下载)_bc_33


PBC教程 | 超详细图解—如何在VS2015中配置PBC库(附密码学常用库的下载)_main函数_34

长按二维码关注




标签:函数,VS2015,OpenSSL,报错,PBC,打开,密码学,我们
From: https://blog.51cto.com/u_12001271/5973628

相关文章