正则表达式:在任意文件中搜索MD5

时间:2011-12-07 23:46:03

标签: regex md5

请参阅以下34个字符的ASCII字符串。我试图在这个字符串上有3个MD5哈希匹配。

  

8AC905DD4AB2038E5F7EABEAE792AC41BC

[A-F0-9]{32}仅匹配前32个字符。

这是我所拥有的二元逆向工程项目的一部分。

如何从提到的字符串中获得3个不同的匹配?任何想法都表示赞赏。

干杯,

1 个答案:

答案 0 :(得分:3)

您没有说出您使用的语言,因此我提供了两个片段 - 用于Python和PHP。但这里的线索是(?=([A-F0-9]{32}))模式(见下面的例子)。

解决方案(Python)

有一个解决方案,以下是用Python编写的:

>>> import re 
>>> data = '8AC905DD4AB2038E5F7EABEAE792AC41BC'
>>> matches = re.finditer(r'(?=([A-F0-9]{32}))', data)
>>> results = [match.group(1) for match in matches]

测试

结果将是(如this demo):

>>> results
['8AC905DD4AB2038E5F7EABEAE792AC41', 'AC905DD4AB2038E5F7EABEAE792AC41B', 'C905DD4AB2038E5F7EABEAE792AC41BC']

这是你一直期待的。

解决方案(PHP)

在PHP中,它看起来像这样:

<?php

$data = '8AC905DD4AB2038E5F7EABEAE792AC41BC';
$results = array();
preg_match_all('/(?=([A-F0-9]{32}))/', $data, $results);

并且$results将是以下数组:

Array
(
    [0] => 8AC905DD4AB2038E5F7EABEAE792AC41
    [1] => AC905DD4AB2038E5F7EABEAE792AC41B
    [2] => C905DD4AB2038E5F7EABEAE792AC41BC
)

请参阅this demo以获取证明。