我已经打开一个文件,查找任何有HASH("<stuff>")
与HASH(<sha1(stuff)>)
得到相同的SHA1哈希值与所有字符串
替代它的脚本的全部脚本是这样的:
import sys
import re
import hashlib
def _hash(seq, trim_bits=64):
assert trim_bits % 8 == 0
temp = hashlib.sha1(seq).hexdigest()
temp = int(temp, 16) & eval('0x{}'.format('F' * (trim_bits/4)))
temp = hex(temp)
return str(temp[2:]).replace('L', '')
if __name__ == '__main__':
assert len(sys.argv) == 3
in_file = sys.argv[1]
out_file = sys.argv[2]
with open(in_file, 'r') as f:
lines = f.readlines()
out_handle = open(out_file, 'w')
for line in lines:
new_line = re.sub(r'HASH\((["\'])(.*?)\1\)', 'HASH({})'.format(_hash(r'\2')), line)
out_handle.write(new_line)
out_handle.close()
然而,当我运行这个时,所有的sha1哈希变得完全一样,这对我来说没有意义。如果不是写散列,我用HASH({}).format(r'\2')
来切换它,它会用双引号之间的字符序列替换它。那么为什么sha1散列返回相同的字符串呢?
看起来你会调用总是返回相同值的_hash(r'\ 2')'。 (http://blog.codinghorror.com/regular-expressions-now-you-have-two-problems/) – quamrana 2014-10-29 14:23:18