我有包含文本数据的文本文件,其中包含各种数据,如MD5,文件ssh和其他文本。
我想从文本文件中只读取MD5。 我的代码:
with open(outfile,'r') as ofile:
contents = ofile.read()
contents = contents.lower()
data = ''
md5s = re.findall('[0-9a-f\$]{32}',contents)
outfile = path[:-3] + 'md5'
uniquemd5s = []
for md5 in md5s:
if md5 not in uniquemd5s:
uniquemd5s.append(md5)
for md5 in uniquemd5s:
data = data +md5+"\n"
with open(outfile,'w') as fp:
fp.write(data)
然而,这里的问题是,Expression返回有效的MD5以及ssh的前32个字符。那么如何限制表达式只选择32个字符长的MD5。
文本文件中的数据如下:
TLP:白色如有任何疑问,请联系intelreports@kaspersky.com12
MD5 972092CBE7791D27FC9FF6E9ACC12CC3
图3. Carbanak数字签名
特洛伊木马sshd,ssh,ssh-add和libkeyutils.so.1符号链接的目标。 •98cdbf1e0d202f5948552cebaa9f0315b7a3731d Linux / Ebury - 版本0.4.4 - sshd •4d12f98fd49e58e0635c6adce292cc56a31da2a2 Linux / Ebury - 版本0.4.4 - sshd
答案 0 :(得分:1)
将单词分隔符添加到正则表达式:
md5s = re.findall('\b[0-9a-fA-F]{32}\b',contents)
这将避免找到SHA哈希。
注意:SSH不是哈希值。它代表着“安全的外壳”。并允许远程终端会话。