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

mi7gmzs6  于 2023-05-05  发布在  Mysql
关注(0)|答案(2)|浏览(115)

我是Python的新手,坚持简单的任务,现在看起来一点也不简单。
所以基本上,这个想法是向开发团队提供一个模糊的MySQL转储。
转储中充满了带有客户电子邮件的INSERT语句,其想法是用一些随机散列(随机很重要,因为UNIQ索引)替换用户名,并替换域名。
我尝试使用re.sub,它可以完成这项工作,但前提是每行只有一个正则表达式匹配。不幸的是,INSERT语句在一行中有很多电子邮件,所以我想知道我错过了什么吗?
基本上,这里是一个数据样本:

INSERT INTO `users` VALUES ('john','john@gmail.com','\0'),('kate','kate@yahoo.com','\0'),
INSERT INTO `users` VALUES ('peter','peter@gmail.com','\0'),

当前结果:

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

所需输出:

INSERT INTO `users` VALUES ('john','-**5196869426929071700**@example.com','\0'),('kate','-**7140769694376981046**@example.com','\0'),
INSERT INTO `users` VALUES ('peter','-4574418619379266923@example.com','\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)

任何关于这个问题的想法真的很感激,提前感谢!

klsxnrf1

klsxnrf11#

在创建转储和有人看到混淆的电子邮件之间会发生什么?
这里有一个想法:
1.去拉屎
1.将转储装载到单独的表(或数据库,甚至服务器)中

  1. SET email = MD5(email);
    1.将该表移动到其最终位置。
    目标是什么?
    如果电子邮件列需要在表之间保持一致,并且相同的电子邮件在不同行中显示为相同的散列,则可以实现这一点。
    例如,'john@gmail.com'始终唯一地转换为'1f 9d 9a 9 efc 2f 523 b2 f09629444632 b5 c'。
    如果您需要分别查看名称和域,我的方法需要一些工作。但您的“www.example.com“也是example.com如此。
ia2d9nvy

ia2d9nvy2#

您可以使用mysqldump --tab来转储CSV数据文件,而不是SQL。然后对CSV数据进行混淆。
导入这些文件稍微复杂一些。您需要重新创建这些表,然后一次使用mysqlimport创建一个表。
您需要编写一些脚本来循环访问这些表,但是这样做的好处是导入比通过运行SQL文件导入要快得多。

相关问题