差分隐私 JAVA版实现

差分隐私(Differential Privacy)是Dwork[3] 在2006年针对数据库的隐私泄露问题提出的一种新的隐私定义。主要是通过使用随机噪声来确保,查询请求公开可见信息的结果,并不会泄露个体的隐私信息,即提供一种当从统计数据库查询时,最大化数据查询的准确性,同时最大限度减少识别其记录的机会,简单来说,就是保留统计学特征的前提下去除个体特征以保护用户隐私。
百度出来的所有差分隐私都只是对差分隐私名词的解决,并没有可以实际使用的代码,本人出于对算法的好奇,花了好几天的时间整理,同时也参考了很多其它的例子,并整理了当前算法的java版本,可直接使用到项目当中。

关键代码,如下
private static ImmutableSortedMap<Integer, Integer> getPrivateCounts(Collection<Visit> visits) {
    Map<Integer, Count> dpCounts = new HashMap<>();
    for (int i = OPENING_HOUR; i <= CLOSING_HOUR; i++) {
      Count dpCount = Count.builder()
          .epsilon(LN_3)
          .maxPartitionsContributed(10)
          .build();
      dpCounts.put(i, dpCount);
    }
    visits.forEach(v -> dpCounts.get(v.entryTime().getHour()).increment());
    return ImmutableSortedMap.copyOf(
        dpCounts.entrySet().stream()
        .collect(
            toMap(Map.Entry::getKey, e -> (int) e.getValue().computeResult())));
  }
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
工程结构

1、工程中有一个lib文件夹,里面是包含需要的相关包,比如第一张图,没有引入相关jar,代码报错

差分隐私 JAVA版实现_开发语言


2、加下相关加包

差分隐私 JAVA版实现_差分_02


差分隐私 JAVA版实现_算法_03


差分隐私 JAVA版实现_java_04


差分隐私 JAVA版实现_java_05


2、运行项目当中的Main

差分隐私 JAVA版实现_算法_06


3、结果信息,加了差分隐私加密后,如下结果

差分隐私 JAVA版实现_开发语言_07


4、源码下载址:https://pan.baidu.com/s/1HID13ob_SHDhk8U5gwmaFg?pwd=rbyg