我需要对数据库日志文件进行大规模匿名化。
其中一部分将涉及隐藏各种字段名称(字符串)以及 IP 地址。
<强>1。字段名称
例如,我们可能有字符串 BusinessLogic.Categorizes.ExternalDeals
。在匿名版本中,我们希望它是类似于 Jerrycan.Doorway.Fodmap 的东西(或者一些乱码,但仍然“可发音”的东西)
目的只是为了掩盖原始字符串 - 但是,我们仍然希望能够匹配这些字符串在不同日志文件中的出现情况。
哈希的要求是:
- 可重复 - 也就是说,每次传入的相同输入始终会产生相同的输出。我们需要能够匹配不同日志文件之间的字段(我们试图阻止的是有人派生原始字符串)。
- 单向 - 无法通过反转输出来生成输入。
- 发生冲突的可能性很低 - 如果两个字段映射到相同的输出,就会扰乱我们的分析。
- 人类可读(或可发音)- 手动扫描日志文件的人应该能够找出字段,并在视觉上将它们匹配。或者,如果需要,可以通过电话阅读。
- 短字符串 - 我确实知道这与可用熵之间存在权衡,但是,理想情况下,像
HumanReadable
这样的字符串应该映射到LizzyNasbeth
这样的东西。
我环顾四周,发现https://github.com/zacharyvoase/humanhash (输出哈希比我想要的要长一点)和 https://www.rfc-editor.org/rfc/rfc1751 (并不是真正“可发音”——理想情况下,我们想要一些看起来像英语人类单词的东西,但实际上不是——而且,再一次,有点长)。
有哪些算法或方法可以解决这个问题?或者您可以推荐任何库或实现吗?
<强>2。 IP 地址
对于 IP 地址,我们需要一种方法来屏蔽它们(即外部观察者不可能导出原始 IP 地址),但仍然可以在不同的日志文件中重复(即相同的输入始终产生相同的输出) )。
理想情况下,输出仍然“看起来”像 IP 地址。例如,也许 192.168.1.55 会映射到 33.41.22.44(或者我们也可以使用字母代码,如果这样更容易的话)。
关于如何做到这一点有什么想法吗?
最佳答案
您可以使用codenamize :
$ codenamize BusinessLogic -j "" -c
AbsorbedUpper
您可以从命令行使用它或将其作为 Python 库使用。
(免责声明,我写的)。
关于string - 人类可读的短单向哈希用于模糊日志文件中的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31059166/