毕业设计需要在Linux操作系统下使用HElib库做同态加密操作,之前看了HElib库官方教程,但是官方教程没有详实的解释操作流程,所以自己搜索整理了网上的资料,总结出了一些经验和一些坑。
1. 下载Helib库
我是从自己的码云仓库下载的,地址是https://gitee.com/lingyao619/HElib.git,相对与GitHub,国内的代码托管平台下载代码速度很快。
# cd
# git clone https://gitee.com/lingyao619/HElib.git
2. 利用make命令编译源文件
首先修改src目录下的Makefile文件,修改的内容如下,
第一处是修改第19行,加入std子命令:
COPT = -g -O2 -std=c++11 -march=native
第二处是在第85行下面加入下面的命令:
install: cp -p fhe.a /usr/local/lib/libfhe.a chmod a+r /usr/local/lib/libfhe.a rm -rf /usr/local/include/fhe mkdir -m 755 /usr/local/include/fhe cp -p *.h /usr/local/include/fhe/ chmod -R a+r /usr/local/include/fhe
该代码段的作用是,将下载的头文件和函数库放入到本地文件夹。
以下是两处修改的截图:
然后保存Makefile文件,在src文件夹下编译源码(我是用超级用户身份运行的):
# make # make check # make install
注意,执行make check命令的时候可能会出现报错,我的错误是:
但是这个错误并没有影响后面的步骤。
执行完make install后,出现以下内容则正确:
3. 测试程序
HElib库的example文件夹中给了两个测试用的cpp文件,把这两个文件拷贝到src文件夹下,并且修改头文件格式(修改为同级目录的形式),修改完之后的头文件引用格式如下图所示:
然后在src目录下执行如下编译命令:
# g++ -pthread -g -O2 -std=c++11 -march=native -DFHE_THREADS -DFHE_BOOT_THREADS -o BGV_general_example BGV_general_example.cpp fhe.a -lntl -lgmp -lm # g++ -pthread -g -O2 -std=c++11 -march=native -DFHE_THREADS -DFHE_BOOT_THREADS -o binaryArith_example binaryArith_example.cpp fhe.a -lntl -lgmp -lm
执行完成后,生成了编译后产生的二进制文件,分别直接运行两个文件:
# ./BGV_general_example
结果为:
# ./binaryArith_example
结果为:
运行成功。
4. 附参考资料
https://blog.csdn.net/weixin_43774577/article/details/103438782
Helib官方库:https://github.com/homenc/HElib
在接下来的文章中,我会记录我在学习的HElib库过程中的相关知识和经验。