编程水平有限,代码可能比较丑。
本项目为毕业设计的一部分,实现一种可搜索加密方案。
选择SWP
方案为主要思想,通过结合gRPC
,ProtocBuf
,RocksDB
等第三方库来实现。
-
SWP
方案来自于D.Song等人的Practical Techniques for Searches on Encrypted Data,为一种对称可搜索加密方案。 -
gRPC
为Google开源的一个高性能、开源和通用的RPC框架。 -
ProtoBuf
为Google开源的一种数据序列化的方案,具有高的转化效率,时间效率和空间效率,远超同类json,xml等。 -
RocksDB
是一个来自FaceBook的可嵌入式的支持持久化的key-value存储系统,基于LevelDB
改进而来。
操作系统版本:Deepin20.2
内核版本:5.10.18-amd64-desktop
注意:第三方库版本尽可能一致
rocksdb
版本:6.16.4
protobuf
版本:3.14.0
gRPC
版本:1.36.0
其中protocbuf
和grpc
版本匹配即可
-
参考本人写的Ubuntu/Deepin上安装Rocksdb
-
由于
gRPC
的实现依赖protobuf
,因此这两个库可以同时安装,且建议同时安装,即使用gRPC
源码中包含的protobuf
源码来编译安装。具体步骤如下:
sudo apt-get install build-essential autoconf libtool pkg-config cmake git clone -b v1.36.0 https://github.com/grpc/grpc cd grpc git submodule update --init
// 此步骤参考grpc/BUILDING.md mkdir -p cmake/build cd cmake/build cmake ../.. -DBUILD_SHARED_LIBS=ON make sudo make install
正常情况下,
protobuf
作为子模块也已经安装成功,如果没有安装,则需要去third_party/protobuf
路径下手动安装,安装方式如下:./autogen.sh ./configure make sudo make install
cd grpc/examples/cpp/helloworld make ./greeter_server ./greeter_client
如果测试失败,查看报错信息,如果是缺少依赖,则多半因为子模块没能成功安装,前往
third_party
目录下手动安装缺少模块,安装方式与protobuf
类似。
SWP-of-searchable-encryption
├── protoc/ # protocbuf相关目录
│ ├── rpc.grpc.pb.cc # 由rpc.protoc生成的grpc通讯接口源文件
│ ├── rpc.grpc.pb.h # 由rpc.protoc生成的grpc通讯接口头文件
│ ├── rpc.grpc.pb.o
│ ├── rpc.pb.cc # 由rpc.protoc生成的基本接口源文件
│ ├── rpc.pb.h # 由rpc.protoc生成的基本接口头文件
│ ├── rpc.pb.o
│ ├── rpc.proto # 使用protocbuf序列化的通讯信息内容
│ └── updateprotoc.sh # 将rpc.proto生成接口的脚本
├── submodule/ # 工具类文件
│ ├── encryption.cc # 加密解密相关函数源文件
│ ├── encryption.h # 加密解密相关函数头文件
│ ├── encryption.o
│ ├── tools.cc # 工具函数源文件
│ ├── tools.h # 工具函数头文件
│ └── tools.o
├── rocksdb-data/ # 服务器端数据库目录
├── client # 客户端可执行文件
├── client.cc # 客户端源文件
├── client.h # 客户端头文件
├── client.o
├── server # 服务器端可执行文件
├── server.cc # 服务器端源文件
├── server.h # 服务器端头文件
├── server.o
├── Makefile # 编译server和client
└── README.md # readme
因Github不支持渲染公式,实现原理部分迁至本人博客。