代码理解

这段代码实现了一个名为 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 哈希函数生成 xy,然后计算它们的异或值 xy,并使用布隆过滤器构建 XSet。
  • Step 2.2: 计算 TSet 条目。对于每个属性值对,生成一个 token,并计算每个记录的加密值和哈希值,最后将这些值存储在 tset 中。

4. getTsetgetF 方法

  • getTset(): 返回 tset 映射。
  • getF(): 返回布隆过滤器 f

5. Store 方法

public void Store(String text)
  • text: 用于生成输出文件的名称。
  • 该方法将 tsetf 的内容写入文件。

示例

假设我们有一个包含以下数据的 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");
    }
}

在这个示例中:

  1. Setup_JXT(1, 2, 1, 10, "condition"): 创建一个 Setup_JXT 对象,表 ID 为 1,2 个非连接属性,1 个连接属性,10 条记录,查询条件为 "condition"。
  2. setup.construct(): 构建 TSet 和 XSet。
  3. setup.Store("example"): 将 TSet 和 XSet 存储到文件 data/EDB/JXT_example.dat 中。
posted @ 2025-03-15 20:10  bublen  阅读(20)  评论(0)    收藏  举报