是否可以在文件中找到所有 md5 哈希并将其保存到另一个文件中?

Posted

技术标签:

【中文标题】是否可以在文件中找到所有 md5 哈希并将其保存到另一个文件中?【英文标题】:Is it possible to find all md5 hashes in file and save it to another file? 【发布时间】:2021-12-18 23:26:51 【问题描述】:

我有一个 txt 文件(几 GB 大小!),我想从中提取 md5 哈希。这对我来说很容易,但是......单词之间每行的空格数量是不规则的。例如:

NUMBER(几个空格)LOGIN(几个空格)MAIL(几个空格)MD5 HASH(几个空格)DATE (几个空格)一些无用的字符。

md5 之后的所有数据都是无用的。 我想从这个文件中提取所有 md5 哈希,并且只提取 md5。我不需要任何其他数据。如果登录、邮件和哈希之间有一定数量的空格,这将是一件容易的事,但是......我没有足够的经验。数据之间的空格数量可能会有所不同。

感谢大家的帮助。

到目前为止,我设法更改了位于 here (md5hashes.txt) 使用此代码到this format (lines.txt):

import io
import re

errors = 0

#name of file to store addresses
file_to_save = open("md5hashes.txt", 'w') # this file contains md5 hashes with other useless data
file_to_read = "lines.txt" #and there we will store only md5

print(f"Hello. Opening file_to_read")


with io.open(file_to_read, mode='r', encoding='utf8') as file_to_open:
data = file_to_open.readlines()

for data_in_file in data:
    file_to_save.write(str(data_in_file.split()))

file_to_open.close()
file_to_save.close()
print("All files closed.")

我认为这将删除空格并简化解析文件以删除其他无用数据。但是没有。

有什么想法吗?

也许更好的办法是检查每个字符串是否正好有 32 个字符长并且只包含 a-f 字母和 0-9 位数字,然后将其提取到另一个文件中?

【问题讨论】:

【参考方案1】:
>>> 'NUMBER  LOGIN     MAIL  MD5_HASH  DATE      SOME_USELESS_CHARACTERS'.split()
    ['NUMBER', 'LOGIN', 'MAIL', 'MD5_HASH', 'DATE', 'SOME_USELESS_CHARACTERS']

str.split(),即没有任何参数会将连续的空白视为一个

编辑: 来自lines.txt的数据:

with open('lines.txt') as f:
    hashes = [line.split()[3] for line in f]

print(hashes)

输出

['e2a18210956d33cd2f636d2cd9286e4a', '4f1d414c5f6c91858a5a9f997b56194a', '99d6341dbd215172886e40227c7960db', 'fa077d39cb67070d255b200196bfc7e6', '5469aba04997b10ce9cee08498eb0368', '9c8be11d1d1b76555dcbac30d6c6b19b', '067c10d420547bf07d40bc096ad12c74', 'c6983b366e2ff8a0ab159d6778cff745', '9f22f8432cf7554cc52706164a1d4191', '0a23eb155ee725dd5c4a52b34d91073d', 'a700028489912c64da295a8466cf8e5b', 'e6ac227d436afadddb8dab18a49d8051', 'b9be9adee29895765f1a48b0ea7d3d82', '8d84ed9be2bfb96b0332beb1c4d0c577', '46470f42630e4a603383a58b8ae4a1f7', '418b45086b2a216939705d36c0acf989', '56289f28e8816d2272f6452e7313a76f', '2004-09-14', 'acfda40bb16465ffc42a2c573f8a8d0d', '3dc5a9c8f6f3822de0634a4f5cd4ae8c', '25d55ad283aa400af464c76d713c07ad', 'e10adc3949ba59abbe56e057f20f883e', 'da2092eb7a8905c8f711650eb43ddba8', '1de164dbf6b484df90bfda65e2610dba', 'f87462bc136a9dbe6aa3ad802b45ecd2', '6e207e6c794467cb361b7b0aa32a7123', '37a58dd2291bb48bd2746b5aeb1c2999', '82203b49f312584c5fc6aa27954bb416', '20c9926ade8211bfac99a3b01852d32d', '1c91b775b4ef959426d78eacca908690', '3c61262142f9e33fd7ff96811c469c0f', '72acde4a88378f62cf580ed7024d7a0d', '6b1d24ff83a319070db95c6c84b9be31', '02051eaad6027fc861248a2f2f314bb3', '7d550855dcfa16e1af386b4fab05bc97', '64cb8e79efcab677bce933f037ee930e', 'fdcca1ac3b4e09d5be64c0ce93f6a894', 'fb9cf8cda3655922c953ee252c4ea92b', 'de0dfe3265f63b0fdcc3067e3b0ecc60']

您会注意到数据不一致 - 第 18 行缺少一封电子邮件。因此,索引 3 处的元素是日期,而不是哈希。由您来判断这是否是示例数据中的故障(即您在匿名数据时删除了它)还是数据确实有问题

【讨论】:

我添加了我尝试做的代码。如果您可以看一下帖子的内容... ;) 检查我编辑的答案

以上是关于是否可以在文件中找到所有 md5 哈希并将其保存到另一个文件中?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以将 16 位二进制数转换为两个字符并将其保存到文本文件中?

逐行读取文件然后哈希它们,在php中给出错误的输出

如何录制音频并将其保存到沙盒?

如何生成唯一的哈希并将其保存在我的 MongoDB 文档中,而不必通过 req.body 发送?

如何监控 Azure 文件中每日传入的数据文件并将其保存在 SQL 数据库中

哈希一行SQL行?