代码理解
这段代码实现了一个名为 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中。

浙公网安备 33010602011771号