我已經打開一個文件,查找任何有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