这段代码实现了一个名为 Setup_JXT
的类,用于构建和存储加密数据结构(TSet 和 XSet),这些结构通常用于加密数据库或隐私保护查询系统。
1. 类成员变量
- K_aes, K_token, K_x, K_y, K_h1, K_h2: 这些是用于加密和哈希的密钥。
- table_id: 表的标识符。
- key_column: 非连接属性的列数。
- join_column: 连接属性的列数。
- record_num: 表中的记录数。
- condition: 查询条件。
- id: 记录的唯一标识符数组。
- keyword: 非连接属性的关键字数组。
- join_attr: 连接属性的数组。
- f: 一个布隆过滤器(Bloom Filter),用于实现 XSet。
- tset: 一个映射,存储 TSet 条目,键是
BigInteger
类型的 token,值是一个tuple
对象的列表。
2. 构造函数
public Setup_JXT(int table_id_, int key_column_num, int join_column_num, int record, String condition_t)
- table_id_: 表的标识符。
- key_column_num: 非连接属性的列数。
- join_column_num: 连接属性的列数。
- record: 表中的记录数。
- condition_t: 查询条件。
3. construct
方法
这个方法负责构建 TSet 和 XSet。
3.1 读取数据集
- Step 1.1: 准备参数,初始化数组和映射。
- Step 1.2: 从 CSV 文件中读取数据,并构建
reverse_id
映射,该映射存储每个属性值对对应的记录 ID。
3.2 构建 XSet 和 TSet
- Step 2.1: 计算 XSet 条目。使用 SHA-256 哈希函数生成
x
和y
,然后计算它们的异或值xy
,并使用布隆过滤器构建 XSet。 - Step 2.2: 计算 TSet 条目。对于每个属性值对,生成一个 token,并计算每个记录的加密值和哈希值,最后将这些值存储在
tset
中。
4. getTset
和 getF
方法
- getTset(): 返回
tset
映射。 - getF(): 返回布隆过滤器
f
。
5. Store
方法
public void Store(String text)
- text: 用于生成输出文件的名称。
- 该方法将
tset
和f
的内容写入文件。
示例
假设我们有一个包含以下数据的 CSV 文件 data/table1/table1_k2_j1_10_condition.csv
:
id,attr1,attr2,join_attr1
1,value1,value2,join_value1
2,value3,value4,join_value2
...
我们可以使用 Setup_JXT
类来构建 TSet 和 XSet:
public class Main {public static void main(String[] args) {Setup_JXT setup = new Setup_JXT(1, 2, 1, 10, "condition");setup.construct();setup.Store("example");}
}
在这个示例中:
- Setup_JXT(1, 2, 1, 10, "condition"): 创建一个
Setup_JXT
对象,表 ID 为 1,2 个非连接属性,1 个连接属性,10 条记录,查询条件为 "condition"。 - setup.construct(): 构建 TSet 和 XSet。
- setup.Store("example"): 将 TSet 和 XSet 存储到文件
data/EDB/JXT_example.dat
中。