安装HElib并运行示例程序

简介: 安装HElib并运行示例程序

1. HElib简介


HElib是一个基于C++语言的同态加密开源软件库,底层依赖于NTL数论运算库和GMP多精度运算库实现,下载地址在:github HElib。

2. HElib安装的前期准备


HElib可以在Ubuntu、CentOS、Fedora和macOS上安装,本篇博客以 CentOS 为例。安装HElib的方法有两种,其中博客:Hang Shao HElib 详细讲解了HElib的第二种安装方法,本篇博客就不重复啰嗦,我们来讲讲 第一种 安装方法,也是较为简单的一种。

第一种安装方法不需要自己配置安装:NTL(https://libntl.org/) 和 GMP(https://gmplib.org/) 两个库,相对轻松一些。

HElib在CentOS上安装所需要的环境:

git >= 2.27
GNU make >= 4.2
g++ >= 9.3.0 (建议使用 g++ 10.3.0)
cmake >= 3.16
m4 >= 1.4.16
patchelf >= 0.9

2.1. git 安装/升级

首先使用命令查看当前的git版本:

git --version

若版本小于2.27,则升级:

yum install git

2.2. GNU make 安装/升级

首先使用命令查看当前的make 版本:

make -v

若版本小于4.2,则升级:

yum install make

2.3. g++ 安装/升级

g++的安装和升级与其他库不同,由于系统中不同的软件可能需要不同的g++版本,所以不能直接覆盖安装g++。

这里,我们使用devtoolset来对g++的版本进行控制:

更新yum:yum update;

安装centos-release-scl:yum install centos-release-scl;

安装devtoolset:yum install devtoolset-10-gcc*(若要安装其他版本的gcc/g++,可以把10换成其他版本号);

将g++10加入scl进行控制:scl enable devtoolset-10 bash(要使用scl来控制其他版本的gcc/g++,只需要把10换成对应版本号即可);

激活g++10环境:source /opt/rh/devtoolset-10/enable(要激活其他版本的gcc/g++,只需要把10换成对应版本号即可);

查看g++版本:gcc -v

2.4. cmake 安装/升级

首先使用命令查看当前的cmake 版本:

cmake -version

若版本小于3.16,则升级(直接升级):

yum install cmake

如果直接升级的方法不成功,那就只好编译安装了:

在官网:https://cmake.org/files/ 选择版本大于3.16的cmake并复制链接,例如我们选择:cmake-3.22.2.tar.gz;

下载cmake:wget https://cmake.org/files/v3.22/cmake-3.22.2.tar.gz

解压缩cmake:tar zxvf cmake-3.22.2.tar.gz,然后打开目录:cd cmake-3.22.2;

删除低版本的cmake:yum remove cmake -y;

编译cmake:./configure --prefix=/usr/local/cmake;

安装cmake:make && make install;

创建软连接:ln -s /usr/local/cmake/bin/cmake /usr/bin/cmake;

修改环境变量:vim /etc/profile,在文件末尾加入两行(注意检查是否之前已存在):export CMAKE_HOME=/usr/local/cmake、export PATH=$PATH:$CMAKE_HOME/bin;

刷新配置文件:source /etc/profile。


2.5. m4和patchelf 安装/升级


直接安装即可:

yum install m4

yum install patchelf


3. HElib的下载和安装


(1) 上面已经说过,HElib的主页在:https://github.com/homenc/HElib,那么我们直接git下来就好了:

git clone https://github.com/homenc/HElib


(2) 然后在HElib目录内创建一个build目录,用于构建项目:

cd HElib

mkdir build

cd build


(3) 在build目录内构建项目:

cmake -DPACKAGE_BUILD=ON -DENABLE_TEST=ON ..


这里有必要说一下,HElib的作者在cmake时提供了-DCMAKE_INSTALL_PREFIX选择用于改变项目构建的路径,但是如果你已经有root权限了,就不需要这个步骤了。如果你没有root权限,那就要改成:

cmake -DPACKAGE_BUILD=ON -DENABLE_TEST=ON -DCMAKE_INSTALL_PREFIX=/home/alice/helib_install ..


其中,/home/alice/helib_install是一个自定义的路径,你想把HElib安装在哪里,就把这个路径改成那里的路径。

(4) 编译

cmake结束后,就进行编译:

make -j16


这里的16是指启用16个线程进行编译,可以改多,不建议改得太少,否则这个步骤会进行地很慢。

(5) 进行测试,这个步骤可以省略:

ctest


说一下,这个命令只有在cmake步骤时设置了-DENABLE_TEST=ON时有用,否则是执行不了的。

(6) 安装HElib

make install


如果在cmake时没有设置-DCMAKE_INSTALL_PREFIX,那么HElib默认安装在/usr/local/helib_pack下。

我们打开这个目录:

cd /usr/local/helib_pack


目录中有4个子目录:include、lib、lib64和share

drwxr-xr-x. 4 root root  43 Jan 28 05:34 include
lrwxrwxrwx. 1 root root   5 Jan 28 05:34 lib -> lib64
drwxr-xr-x. 3 root root 184 Jan 28 05:42 lib64
drwxr-xr-x. 5 root root  42 Jan 28 05:34 share


分别把它们复制到/usr/local的对应位置:

cp -r ./include/* /usr/local/include/
cp -r ./lib/lib* /usr/local/lib/
cp -r ./lib/pkgconfig/* /usr/local/lib/pkgconfig/
cp -r ./lib64/lib* /usr/local/lib64/
cp -r ./lib64/pkgconfig/* /usr/local/lib64/pkgconfig/
cp -r ./share/cmake/ /usr/local/share/
cp -r ./share/doc/* /usr/local/share/doc/
cp -r ./share/info/* /usr/local/share/info/


(7) 更新lib文件

ldconfig


如果共享库文件安装到了/lib或/usr/lib目录下,那么需执行一下ldconfig命令。

ldconfig命令的用途,主要是在默认搜寻目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录下,

搜索出可共享的动态链接库(格式如lib*.so*),进而创建出动态装入程序(ld.so)所需的连接和缓存文件。缓存文件默认为/etc/ld.so.cache,此文件保存已排好序的动态链接库名字列表。

到此为止,HElib就安装好啦。

4. 运行HElib示例程序


让我们回到之前git clone下来的HElib目录,里面有个examples子目录,进入它:

cd ./examples


和上面的步骤一样,我们需要创建一个build目录,用于构建项目:

mkdir build

cd build


由于我们已经把HElib安装到/usr/local/下了,所以可以直接进行cmake:

cmake -Dhelib_DIR=/usr/local/share/cmake/helib/ ..


然后make:

make -j16


完成后,在build目录内会生成一个bin目录,打开它:

cd ./bin


运行其中一个示例程序试试看:

cp ../../BGV_country_db_lookup/countries_dataset.csv ./
./BGV_country_db_lookup


注意,cp ../../BGV_country_db_lookup/countries_dataset.csv ./是BGV_country_db_lookup特有的命令,因为这是一个查找程序,而供其查找的数据表就是countries_dataset.csv,所以需要复制过来。

执行了./BGV_country_db_lookup之后,出现如下界面:

0a2653c851af460fa595bd959398a8f1.png

输入一个国家名字,例如China,然后按回车:

2d65d23f6d4748949b924e4057485923.png

啥也没查着,没有China的数据,不过这个示例程序依然运行成功了。完成。

相关文章
|
前端开发 数据可视化 Java
程序员最喜欢用的 8 种代码对比工具,值得收入囊中
程序员最喜欢用的 8 种代码对比工具,值得收入囊中
1238 0
|
5月前
|
Ubuntu 网络协议 应用服务中间件
在 Ubuntu 上安装 Nginx
在 Ubuntu 上安装和配置 Nginx 非常简单。首先更新系统包,然后通过 `apt` 安装 Nginx,检查服务状态并配置防火墙规则。访问服务器 IP 测试是否成功显示默认页面。还可管理服务、创建虚拟主机及排查常见问题,适合新手快速上手部署高性能 Web 服务。
607 0
|
安全 数据安全/隐私保护
同态加密含义以及应用场景
文章探讨了同态加密技术的含义、发展历程、技术路线以及在安全求交、隐匿查询、多方联合计算和建模等隐私计算场景中的应用,并分析了其在实际应用中面临的关键问题和研究发展方向,同时指出了同态加密可能导致的计算精度损失和效率降低。
1173 0
同态加密含义以及应用场景
|
机器学习/深度学习 安全 算法
安全多方计算之三:同态加密
安全多方计算之三:同态加密
2318 42
|
12月前
|
Java Maven Spring
如何在idea中创建Springboot项目? 手把手带你创建Springboot项目,稳!
文章详细介绍了在IDEA中创建Spring Boot项目的过程,包括选择Spring Initializr、配置项目属性、选择Spring Boot版本、导入依赖、等待依赖下载以及项目结构简介。
11500 1
|
SQL 缓存 Java
ReflectionUtils反射工具:精要介绍与实战应用指南
ReflectionUtils反射工具:精要介绍与实战应用指南
|
机器学习/深度学习 安全 算法
干货分享 :安全多方计算中的“半诚实性”与“恶意安全性”
干货分享 :安全多方计算中的“半诚实性”与“恶意安全性”
2993 0
|
存储 自然语言处理 Java
Java中的字符型数据(char)
Java中的字符型数据(char)
631 0
|
达摩院 Java Docker
FunASR,官网java示例不通
在离线Docker环境中,使用Java遵循官方示例与WebSocket接口交互:初次连接成功,发送语音文件(byte类型)及结束请求后,未收到预期的文本返回,仅打印“欢迎使用达摩院”信息。服务端响应的text为空,寻求解决建议。
|
安全 Linux 网络安全
2024年甘肃省职业院校技能大赛中职组 “网络安全”赛项竞赛样题-C模块基础设施设置/安全加固
网络安全模块A要求对Windows和Linux服务器进行安全加固,包括密码策略(最小13字符,复杂性要求)、用户管理(禁止非管理员命令提示符,隐藏登录信息)、Nginx安全配置(限制HTTP请求,设置超时时间,降权启动)、日志监控(设置日志大小和覆盖策略)、中间件服务加固(SSH、VSFTPD、IIS服务优化)、本地安全策略(禁止匿名访问,保护密码存储,控制关机,限制Everyone权限)和防火墙策略(限制SSH连接源,防御DoS,允许特定DNS请求)。所有更改需清晰截图并附说明,保存为PDF,命名规则为“网络安全模块A-XX”并提交至U盘。
219 0