我是 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)
对于这个问题的任何想法都非常感谢,提前致谢!
创建转储和有人看到混淆的电子邮件之间会发生什么?
这是一个想法:
目标是什么?
如果电子邮件列需要在表之间保持一致,并且同一电子邮件在不同行中显示为相同的哈希值,则可以实现这一点。
例如,“[电子邮件受保护]”一致且唯一地转换为“1f9d9a9efc2f523b2f09629444632b5c”。
如果您需要分别查看名称和域名,我的方法需要一些工作。 但你的“example.com”也是如此;.
您可以使用
mysqldump --tab
转储 CSV 数据文件而不是 SQL。然后对 CSV 数据进行混淆。
导入这些文件有点复杂。您需要重新创建表格,然后一次使用
mysqlimport
一张表格。
您需要编写一些脚本来循环遍历表,但优点是导入比通过运行 SQL 文件导入要快得多。
我实际上构建了一个名为 Skifta 的工具,它可能会满足您的需求。它是为 SQL 转储中的数据进行匿名化而设计的,例如替换电子邮件,即使每行有多个,并且它会处理唯一值以避免冲突。或许可以为你省去很多麻烦!有一个内置的转换器,用于处理电子邮件。