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.pswp.cn/news/446538.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/446538.shtml
英文地址,請注明出處:http://en.pswp.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…

從零開始配置服務器密碼機的開發環境

開發環境環境配置安裝gcc編譯器安裝g編譯器安裝make安裝cmake安裝ssh安裝git和配置安裝大文件管理工具git-lfs安裝數據庫sqlite3安裝數據庫sqlite_orm文件安裝Openssl安裝Tcl和Tk安裝tcl-expect-dev安裝boost安裝clang-format安裝Clion注意事項安裝automake和libudev-dev環境配…

C語言 動態內存分配機制(堆區) int*p=malloc(5*sizeof(4))

C程序內存分配圖 棧區:局部變量 堆區:動態分配的數據 靜態存儲區/全局區:全局變量,靜態數據 代碼區:代碼,指令 內存分配說明 內存動態分配的相關函數 堆區: #inlcude<stdlib.h> Malloc(size);//分配長度為size個字節的連續空間 Calloc(n,size);//分配size個長度為n…

C++ primer 第15章 面向對象程序設計

文章目錄前言OOP&#xff1a;概述繼承動態綁定定義基類和派生類定義基類成員函數與繼承訪問控制與繼承定義派生類派生類中的虛函數派生類對象及派生類向基類的類型轉換派生類構造函數派生類使用基類的成員繼承與靜態成員派生類的聲明被用作基類的類防止繼承的發生類型轉換與繼承…

服務器密碼機部分文件的介紹學習

相關文件包 automake,autoconf使用詳解

C語言 結構體 struct Cat cat1;

引入 使用傳統技術解決 需要定義多個變量或數組 結構體與結構體變量的關系示意圖 類似Java類中的對象(結構體)與屬性(結構體變量) 一切物體都可以看作對象(結構體) 補充:C語言數據類型 簡單使用案例 代碼 Cat是我們自己定義的數據類型 struct Cat cat1;//創建struct Cat的…

boost Filesystem Library Version 3關于文件的一些函數封裝 fsync()函數

boost boost Filesystem Library Version 3boost::filesystem使用方法,根據路徑創建文件夾使用boost.filesystem檢查文件是否存在的正確方式std::filesystem::temp_directory_path關于C#:與boost :: filesystem :: unique_path()等效的C 17是什么?C++ 檔案、資料夾、路徑處理…

c++面向對象高級編程 總目錄

本文是對學習侯捷視頻 c面向對象高級編程系列博客的目錄總索引。 c面向對象高級編程 學習一 不帶指針的類&#xff1a; 訪問私有成員變量的方式&#xff0c;內聯inline&#xff0c;常量成員函數&#xff0c;構造函數&#xff0c;值傳遞&#xff0c;引用傳遞&#xff0c;操作符…

C語言 共用體/聯合體 union

引入 傳統技術的缺陷—結構體 共用體基本介紹 共用體與結構體一樣都是值傳遞 定義共用體的三種方式 內存布局 共用體數據空間占用最大的成員的數據空間大小 案例解析 1) 2) 3) 4) 注: 1010 1101 0101 0100所對應的十進制是負數 計算機中的二進制都是以補碼存儲的,所…

C++ Makefile文件詳解

什么是Makefile文件 一個工程&#xff0c;源文件不計其數&#xff0c;按照類型、功能、模塊分別放在對應的若干個目錄中Makefile定義了一系列的規則&#xff0c;比如定義文件編譯的先后順序。類似shell腳本&#xff0c;也可以執行操作系統的命令Makefile帶來的好處是自動化編譯…

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