在 MySQL 转储文件中混淆电子邮件

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

我是 Python 新手,一直坚持简单的任务,但现在看起来一点也不简单。

所以基本上的想法是向开发团队提供混淆的 MySQL 转储。

转储中充满了带有客户端电子邮件的 INSERT 语句,其想法是用一些随机哈希值替换用户名(由于 UNIQ 索引,随机性很重要)并替换域名。

我尝试使用 re.sub,它可以完成这项工作,但前提是每行有一个正则表达式匹配。不幸的是,INSERT 语句在一行中有很多电子邮件,所以我想知道我是否遗漏了一些东西?

基本上,这是一个数据示例:

INSERT INTO `users` VALUES ('john','[email protected]','\0'),('kate','[email protected]','\0'),
INSERT INTO `users` VALUES ('peter','[email protected]','\0'),

目前结果:

INSERT INTO `users` VALUES ('john','-**5196869426929071700**@example.com','\0'),('kate','-**5196869426929071700**@example.com','\0'),
INSERT INTO `users` VALUES ('peter','[email protected]','\0'),

所需输出:

INSERT INTO `users` VALUES ('john','-**5196869426929071700**@example.com','\0'),('kate','-**7140769694376981046**@example.com','\0'),
INSERT INTO `users` VALUES ('peter','[email protected]','\0'),

我的代码:

import re

with open("dump.sql", "r") as file:
    lines = file.readlines()

def repl(match):
    output = str(hash(line)) + "@example.com"
    return output

new_lines = []
for line in lines:
    new_lines.append(re.sub('([A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,})', repl, line))

with open("dump-processed.sql", "w") as file:
    file.writelines(new_lines)

对于这个问题的任何想法都非常感谢,提前致谢!

python mysql regex
3个回答
0
投票

创建转储和有人看到混淆的电子邮件之间会发生什么?

这是一个想法:

  1. 去垃圾场
  2. 将转储加载到单独的表(或数据库,甚至服务器)中
  3. 更新表 SET email = MD5(email);
  4. 将该桌子移至其最终位置。

目标是什么?

如果电子邮件列需要在表之间保持一致,并且同一电子邮件在不同行中显示为相同的哈希值,则可以实现这一点。

例如,“[电子邮件受保护]”一致且唯一地转换为“1f9d9a9efc2f523b2f09629444632b5c”。

如果您需要分别查看名称和域名,我的方法需要一些工作。 但你的“example.com”也是如此;.


0
投票

您可以使用

mysqldump --tab
转储 CSV 数据文件而不是 SQL。然后对 CSV 数据进行混淆。

导入这些文件有点复杂。您需要重新创建表格,然后一次使用

mysqlimport
一张表格。

您需要编写一些脚本来循环遍历表,但优点是导入比通过运行 SQL 文件导入要快得多。


0
投票

我实际上构建了一个名为 Skifta 的工具,它可能会满足您的需求。它是为 SQL 转储中的数据进行匿名化而设计的,例如替换电子邮件,即使每行有多个,并且它会处理唯一值以避免冲突。或许可以为你省去很多麻烦!有一个内置的转换器,用于处理电子邮件。

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