使用正则表达式屏蔽文件中的敏感数据

问题描述 投票:0回答:1

我们有一个基于 Web 的 Java ESB 应用程序,用于数据转换和处理。在仪表板中,用户可以查看/下载传入的源数据文件。

为了PII数据合规性,我们需要基于正则表达式屏蔽其中的敏感数据信息。用户将在应用程序中定义多个正则表达式模式,我们需要扫描源文件中的这些正则表达式模式并屏蔽敏感数据。

  1. 传入的源文件可以是具有任何布局的任何类型(CSV、XML、JSON、Excel、PDF)。
  2. 敏感信息(信用卡号、SSN 号)可以出现在文件中的任何位置,在极少数情况下,我们没有这些字段在文件中的位置信息。

作为解决方案,我们尝试了Chlorine-Finder API,它在某些情况下效果很好,但存在以下问题:

  1. 它不适用于二进制(Excel 和 PDF)文件。
  2. 我们需要在屏蔽之前将文件转换为 STRING,这对于较大的文件会产生性能影响(就内存使用而言)。

因此,我们正在寻找替代选择。是否还有其他可用于数据屏蔽的 Java 库 - 也可用于二进制文件的库?还有其他建议吗?

java security data-masking
1个回答
0
投票

请查看pdf去识别解决方案。它支持高达 10k 页的大型多页 PDF(扫描版和数字版)。对于处理一页,在 CPU 上大约需要 200 毫秒,在 GPU 上速度更快。

它基于 Spark 并允许扩展流程:

这是管道示例:

binary_to_image = BinaryToImage() \
    .setInputCol("image")

# Define OCR model
image_to_string = ImageToString() \
    .setKeepInput(True)

# Define NER model
# for GPU use Device.GPU.value
ner = Ner() \
    .setOutputCol("ner") \
    .setModel("ApicomPro/deid-bert-onnx-1.2.0")\
    .setNumPartitions(1) \
    .setDevice(Device.CPU.value) \
    .setThreshold(0.0)

image_draw_boxes = ImageDrawBoxes()\
    .setInputCols(["image", "ner"]) \
    .setOutputCol("image_with_boxes") \
    .setFilled(True) \
    .setColor("grey") \
    .setKeepInput(False) \
    .setNumPartitions(32)

image_to_pdf = SingleImageToPdf() \
    .setInputCol("image_with_boxes") \
    .setOutputCol("single_pdf") \

pdf_assembler = PdfAssembler() \
    .setInputCol("single_pdf") \
    .setOutputCol("pdf") \

pipeline = PipelineModel(stages=[binary_to_image,
                                 image_to_string,
                                 ner,
                                 image_draw_boxes,
                                 image_to_pdf,
                                 pdf_assembler
                                ])

Jupyter 笔记本,包含 pdf 去识别的完整示例

它也可作为 REST API 服务使用。

© www.soinside.com 2019 - 2024. All rights reserved.