Можно ли поменять MurmurHa sh в Python с mmh3? - PullRequest
0 голосов
/ 30 января 2020

Вот пример убийцы ха sh:

>>> import mmh3
>>> seq = "AGTCGCTGA"
>>> seq_hash = mmh3.hash64(seq, seed=0, signed=False)
>>> seq_hash
(12042475613054376161, 7271345330980536087)

Мой главный вопрос: возможно ли обратить вспять ммх3 га sh, чтобы получить исходную последовательность?

Мой вторичный вопрос: в чем разница между двумя значениями, которые выводятся?

Можно ли вернуть AGTCGCTGA с 12042475613054376161?

Ответы [ 2 ]

1 голос
/ 30 января 2020

Возможно ли вернуть AGTCGCTGA из 12042475613054376161?

Это происходит менее чем за секунду:

from itertools import count, product
import mmh3

for length in count():
    for seq in map(''.join, product('ACGT', repeat=length)):
        seq_hash = mmh3.hash64(seq, seed=0, signed=False)
        if seq_hash[0] == 12042475613054376161:
            print(seq)
1 голос
/ 30 января 2020

MurmurHa sh не соответствует криптографическим c стандартам, и возможно возможно изменить его (или, по крайней мере, найти последовательность, которая производит тот же ха sh - это может не на самом деле последовательность, которая первоначально произвела ха sh). Вы можете найти C реализацию здесь . Мне не известны какие-либо общедоступные реализации в Python.

Два выходных значения - это две части га sh. hash64 использует 128-битную версию MurmurHa sh, поэтому весь ха sh из seq является объединением двух 64-битных выходов.

...