正则表达式在文本文件中查找MD5

时间:2015-03-24 05:54:38

标签: regex md5

我有包含文本数据的文本文件,其中包含各种数据,如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

  1. PAExec_Move0.dat
  2. 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

1 个答案:

答案 0 :(得分:1)

将单词分隔符添加到正则表达式:

md5s = re.findall('\b[0-9a-fA-F]{32}\b',contents)

这将避免找到SHA哈希。

注意:SSH不是哈希值。它代表着“安全的外壳”。并允许远程终端会话。