[英]How to search a text file table in Python?
我正在創建一個彩虹表,其中的字符串和散列由表中的空格分隔。 彩虹表看起來像這樣:
j)O 3be44b195706cdd25e29d2b01a0e88d4
j)P a83079350701398672677a9ffe07108c
j)Q 2952c4654c127f2bb1086b75d8f1f986
j)R 6621ec6e1ba3c3669259894db8cde339
j)S 0442a2ee045e1913cd2eb094e8945399
我想知道如何制作一個python程序來搜索字符串並找到一個哈希,反之亦然。
我已經讓它搜索整個文檔,但我希望它只搜索特定的列。
我使用了熊貓,我現在可以在特定列中進行搜索,但我希望它只能找到完全匹配:
working_table = pd.read_csv('rainbow_table_md5.txt', sep = ' ', names=["string", "hash"])
print(working_table['hash'].where(working_table['string'] == input(colored("String: ", 'cyan'))))
現在代碼輸出:
String: a
0 0cc175b9c0f1b6a831c399e269772661
1 NaN
2 NaN
...
14094701 NaN
14094702 NaN
Name: hash, Length: 14094731, dtype: object
除了第0行中的匹配之外,我不需要所有其他行
理想情況下,我只需要哈希作為輸出。
你想要“查找”而不是“搜索”,因為只有完全匹配才有意義。 對於這個應用程序,熊貓可能有點過分。 一對詞典就足夠了:
class Rainbow:
def __init__(self, infile, k=20):
self.s_to_hash = {s: hash
for s, hash in self._read_tuples(infile)}
self.hash_to_s = {hash[:k]: s
for s, hash in self.s_to_hash.items()}
self.k = k
@staticmethod
def _read_tuples(infile):
with open(infile) as fin:
for line in fin:
s, hash = line.strip().split()
yield s, hash
選擇k < 32
是嘗試保存一些內存,因為哈希會因為它們的公共前綴而發生沖突。 根據您的記憶力,桌子大小和碰撞風險的胃口,調高或調低味道。 考慮編寫一個getter函數,然后將hash_to_s
私有。
與存儲ascii hex nybbles相比,存儲字節的內存效率是其兩倍。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.