Ubuntu18.04.4 环境下对属性加密算法CP-ABE环境搭建

注意事项

  • cpabe依赖pbc,pbc依赖gmp,gmp依赖M4、bison、flex
  • 如果权限不够 ,命令的前面加上sudo ,不要直接使用root用户进行操作,其带来的隐患有很多

第一步 配置简单的环境

  • 简单环境 包括gcc、g++、make、cmake、openssl
  • 安装之前需要更新apt-get ,命令如下   sudo apt-get update
  • gcc安装:sudo apt-get install gcc
  • g++安装:gcc sudo apt-get install g++
  • make安装:gcc sudo apt-get install make
  • cmake比较麻烦  cmake安装参考链接
  • openssl安装:  sudo apt-get install openssl   和   sudo apt-get install libssl-dev

参考链接

  • 密码机 密钥管理项目安装配置 从零开始

第二步 安装M4、bison、flex

  • M4、bison、flex均可以在terminal中通过sudo apt-get install方式直接安装
  • sudo apt-get install M4
  • sudo apt-get install flex
  • sudo apt-get install bison

第三步 安装GMP

  • GMP下载地址
  • 使用 命令xz -d gmp-6.2.1.tar.xz解压文件,生成一个tar格式的文件
  • 如果使用命令sudo tar -xvf gmp-6.2.1.tar失败的话,或者没有安装xz的话,最好使用7zip完成第一步解压的任务,然后将tar文件上传到ubuntu,使用tar命令解压文件
  • tar命令 不要出现 z,只有-xvf三个元素
  • 不要使用7zip解压tar文件,再将文件夹上传到ubuntu,这个会出错

  • cd gmp-6.2.1.tar.xz 进入解压目录
  • ./configure  --enable-cxx 
  • 开始编译
  • sudo make
  • make check
  • sudo make install

测试

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <gmp.h>int main()
{mpz_t a,b;mpz_init(a);mpz_init(b);mpz_init_set_ui(a, 2);mpz_pow_ui(b, a, 1000);gmp_printf("b = %Zd\n", b);mpz_clear(a);mpz_clear(b);return 0;
}
// 计算2的1000次方
  • 新建.c文件 名字是test_gmp.c
  • 使用命令进行编译  gcc -o test test_gmp.c -lgmp
  • 使用命令 ./test 进行测试

参考链接

  • Linux 安装 GMP 依赖

第四步安装PBC

  • PBC下载地址

  • tar -xvf pbc-0.5.14.tar.gz
  • cd pbc-0.5.14
  • ./configure
  • sudo make
  • sudo make install

测试

  • 测试代码
#include "pbc.h"
int main(void) 
{ 
printf("this is a test\n");
return 0; 
} 
  •  如果使用常规编译方式会出现错误 
  • 正确编译方式:gcc -o foo foo.c -I /usr/local/include/pbc -L /usr/local/lib -Wl,-rpath /usr/local/lib -l pbc
  • 原因解释:Programming in Linux
  • 终端运行 ./foo
  • 运行成功输出内容如下  this is  a test

第五步 安装属性加密算法CP-ABE

  • 安装 glib 
  • sudo apt-get install libglib2.0-dev
  • Ciphertext-Policy Attribute-Based Encryption  下载cpabe 和 libbswabe

需要先安装 libbswabe

  • tar -xvf libbswabe-0.9.tar.gz
  • cd libbswabe-0.9
  • ./configure
  • sudo make
  • sudo make install

再安装cpabe

  • tar -xvf cpabe-0.11.tar.gz
  • cd cpabe-0.11
  • ./configure
  • sudo make

错误1

/usr/bin/ld: /usr/local/lib/libpbc.so: undefined reference to symbol '__gmpz_init'
/usr/local/lib/libgmp.so: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
Makefile:34: recipe for target 'cpabe-setup' failed
make: *** [cpabe-setup] Error 1

 解决办法 修改Makefile

  • vi Makefile
  • 进入Makefile,注意这里M一定是大写,进入后找到找到以LDFLAGS开头的以下部分
  • 注意:这里需要用到vi编辑的一些知识。在进入Makefile后,将光标移至-lcrypto -lcrypto后面,输入i进入编辑模式,输入”\”,然后enter,另起一行,然后直接按Tab,输入-lgmp (-lgmp前面必须是TAB键)。输入的时候小心,多任何一个空格都会出错!完成后按Ese退出编辑模式,然后输入冒号“:”进入命令模式,会发现光标定位到了最低端,此时输入wq即保存退出vi了,如果编辑错了也不用担心,在“:”后输入 q! 即可不保存退出,然后重新进入修改。

旧版本

LDFLAGS = -O3 -Wall \-lglib-2.0  \-Wl,-rpath /usr/local/lib -lgmp \-Wl,-rpath /usr/local/lib -lpbc \-lbswabe \-lcrypto -lcrypto

新版本

LDFLAGS = -O3 -Wall \-lglib-2.0  \-Wl,-rpath /usr/local/lib -lgmp \-Wl,-rpath /usr/local/lib -lpbc \-lbswabe \-lcrypto -lcrypto \-lgmp 
  • sudo make 开始编译

错误2

policy_lang.y: In function ‘yyparse’:
policy_lang.y:67:38: error: expected ‘;’ before ‘}’ token
Makefile:50: recipe for target 'policy_lang.o' failed
make: *** [policy_lang.o] Error 1
  • 修改policy_lang.y
  • 在 67行的 } 前加入;即可
  • sudo make
  • sudo make install

测试

  • cpabe-setup -h
  • 如果结果和下文一致,表明安装成功

参考链接

  • Ubuntu15.10下CPABE环境搭建
  • CP-ABE ToolKit 安装笔记

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/446538.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言 函数指针 int(*ptr)(int,int)

基本介绍 函数指针:指向函数的指针 与数组类似 定义 Int(*pmax)(int ,int)max; Int(*pmax)(int x,int y)max;//形参名称不重要 函数返回类型(*指针)(形参类型)函数名称; 具体案例 代码: *pmax取到函数本身 调用函数指针方式: (*pmax)(x,y); pmax(x,y);//与java中调用函数一…

C++ primer 第14章 操作重载与类型转换

文章目录基本概念直接调用一个重载的运算符函数某些运算符不应该被重载使用与内置类型一致的含义选择作为成员或者非成员输入和输出运算符重载输出运算符<<输出运算符尽量减少格式化操作输入输出运算符必须是非成员函数重载输入运算符>>算术和关系运算符相等运算符…

C语言 回调函数 produce(arr,len,getRand)

基本介绍 回调函数:形参中包含另一个函数的函数指针 用函数指针接收另一个函数 案例 代码解析 具体代码 #include<stdio.h> #include<stdlib.h> //回调函数--//函数原型 int getRand(); int *produce(int*arr,int len,int(*get)()); int main() {int arr[10…

C语言 动态内存分配机制(堆区) int*p=malloc(5*sizeof(4))

C程序内存分配图 栈区:局部变量 堆区:动态分配的数据 静态存储区/全局区:全局变量,静态数据 代码区:代码,指令 内存分配说明 内存动态分配的相关函数 堆区: #inlcude<stdlib.h> Malloc(size);//分配长度为size个字节的连续空间 Calloc(n,size);//分配size个长度为n…

C语言 结构体 struct Cat cat1;

引入 使用传统技术解决 需要定义多个变量或数组 结构体与结构体变量的关系示意图 类似Java类中的对象(结构体)与属性(结构体变量) 一切物体都可以看作对象(结构体) 补充:C语言数据类型 简单使用案例 代码 Cat是我们自己定义的数据类型 struct Cat cat1;//创建struct Cat的…

C语言 共用体/联合体 union

引入 传统技术的缺陷—结构体 共用体基本介绍 共用体与结构体一样都是值传递 定义共用体的三种方式 内存布局 共用体数据空间占用最大的成员的数据空间大小 案例解析 1) 2) 3) 4) 注: 1010 1101 0101 0100所对应的十进制是负数 计算机中的二进制都是以补码存储的,所…

C语言 项目练习-家庭收支软件

目标 需求说明 界面说明 登记收入界面: 登记支出界面 收支明细界面 退出界面 项目代码改进要求 自己完成的代码 版本1 #include<stdio.h> #include<string.h> void choose(int button,int i); //项目--家庭收支软件 static double total10000;//总金额 #de…

c++ fmt 库安装和使用示例、clion配置

安装 git clone https://github.com/fmtlib/fmt.gitmake .mkae && make install CLion使用 使用和安装存在出入下载源码&#xff0c;可以先 clone 到你的项目中去&#xff0c;https://github.com/fmtlib/fmt &#xff0c;我放到的是项目的 dependencies 目录然后在…

C语言 项目 CRM系统(客户信息管理系统)

项目目标 项目需求说明 系统界面 1)添加客户界面 通过编号来区分客户 2)删除客户界面 对用户输入的编号进行核查,存在与否,合法与否 3)显示客户列表界面 4)修改客户信息的界面 项目设计 Customer结构体的设计 CRM系统结构框架图 案例代码 #include <stdio.h>…

代码重构 防火墙 相关知识

参考 依据Linux命令以及sysconf下现有的iptables命令&#xff0c;详见hsm_sysconf_server/src/sysconf_server.cpp中的firewall规则。 接口名称 firewall_manager 目的(现实) 根据网口直连获取当前eth0和eth1的各种信息保证设置的正确性 以及要针对管理口和服务口设计不…

C语言 文件的基本介绍

基本介绍 输入流与输出流 重点在C程序(内存)的数据移动方向 对于C程序(内存) 输入数据:输入流 输出数据:输出流 输入 和输出 C标准库 标准输入输出库 标准文件 getchar()&putchar()函数 代码 #include<stdio.h> #include<stdlib.h> //文件--getchar()和…

ubuntu修改字体 样式

使用 快捷键 ctrlaltt 打开终端安装gnome-tweaks桌面管理工具 sudo apt install gnome-tweaksaltf2 在运行窗口输入 gnome-tweaks 命令&#xff0c;然后回车打开优化窗口&#xff0c;选择第二个front字体选项ubuntu显示中文

C语言 文件的读写

引入 OS操作系统 打开文件fopen()函数 读写模式: r:读取已有文件 w:文件不存在,创建文件并写入文件.文件存在,内容清零,再写入文件 a: 文件不存在,创建文件并写入文件.文件存在,以追加的形式写入文件 r:读写已有文件 w:文件不存在,创建文件并读写文件.文件存在,内容清零,再…

StarWind V2V Image Converter:虚拟机镜像转换工具,可将 IMG 文件转换为 VMware VMDK 文件

操作流程 选择本地的需要转换的文件找到源文件的路径&#xff0c;img格式选择转化后的格式 第一个选择 第二个 速度快一些选择将转化后的文件的存储路径软件的下载链接 链接: https://pan.baidu.com/s/1Fe6yI42Zz9d_Q7aUhGe1FQ 提取码: 5vmv

数学建模基础知识

原型与模型 模型的分类 数学建模 数学建模的分类 成为建模大神 数学建模比赛 数学建模一般步骤 数学建模全过程 数学建模论文写作 1&#xff09;摘要:是决定最后获奖等级的关键 2&#xff09;问题重述:使用自己的语言将问题重述一次 3&#xff09;符号说明:对于常见的或…

数学建模 线性规划模型基本原理

线性规划问题 例1.1 可行解&可行域 matlab标准形式及软件求解 标准形式: C称为价值向量 如果是求max,加一个负号-c^T 如果是求Ax>b,加一个负号-Ax<b 使用matlab求线性规划例题 求解的是最大值:加上负号 y是求解的最优解 zeros()使用: zeros(n)&#xff1a;生…

接上文 ,解决 虚拟机VM,U盘(磁盘)装有系统,将其中系统安装到另外一块磁盘的具体操作

问题原因&#xff1a;接上文&#xff0c;将生成的vsdk格式的磁盘导入VM创建镜像&#xff0c;相关于U盘装载系统镜像&#xff0c;将U盘其中的镜像导入到磁盘里边&#xff0c;U盘是引导&#xff0c;会将系统最终装载到磁盘出错原因是因为 没有新建第二块磁盘 解决 新增一块磁盘如…

数学建模 层次分析法

简介 针对多目标,多准则或无结构特性的复杂决策问题 步骤 解决评价类问题 评价类问题: 资料查找: 1)查找相关文献 2)如果没有找到相关文献 3)搜索 通过上述步骤后得到的结果 构建层次结构模型 举例: 成对比较矩阵 标度表: 奇数:越大越重要 偶数:上述两相邻判断的中值…

接上文 VM安装的ubuntu系统,配置双网卡

点击编辑 进入虚拟网络编辑器 点击更改设置 补充&#xff1a;如何判定桥接至哪张网卡&#xff1f;进入win&#xff0c;winr 输入cmd&#xff1b;输入 systeminfo选中系统&#xff0c;点击右键&#xff0c;选中设置 重启系统使用 ifconfig查看&#xff0c;发现有eth0和eth1…