Как я могу иметь постоянный хэш из кортежа? - PullRequest
0 голосов
/ 27 декабря 2018

Мне нужно создать хеш из кортежа.В идеале мне бы хотелось сделать это из списка, но это невозможно.Мне нужно что-то, что я могу использовать хеш для генерации кортежа, чтобы наконец получить доступ к исходному списку с элементами в правильном порядке (элементы будут строками).

Вот что я пытаюсь хэшировать

l = ['x', 'y', 'z']
t = tuple(l)

Я пытался использовать hash(), но в итоге я не получил одинаковый хэш для сеансов Python, и это то, что мне нужно.

Мне нужен хеш, потому что я хочу создатьфайл основан на этом списке с хэшем в качестве имени файла.Затем я хочу найти имя файла и получить доступ к элементам списка (в правильном порядке), используя только хэш.

Насколько я понимаю, это возможно, но я могу ошибаться.Есть идеи?

Ответы [ 3 ]

0 голосов
/ 27 декабря 2018

Вы можете использовать MD5, который является быстрым и всегда будет давать одинаковый результат для одного и того же ввода.

import hashlib

def get_filename()
m = hashlib.md5()
for s in t:
    m.update(s)
fn = m.hexdigest() # => 'd41d8cd98f00b204e9800998ecf8427e'

Как говорит user2357112, вы не можете восстановить l из fn;но если l был сохранен в файле с хешем MD5, вы сможете прочитать его.

0 голосов
/ 27 декабря 2018

Хеш теоретически необратим.Шифровать, кажется, хотите, чтобы вы хотели.Например, base64

================== update

base64 - технология кодирования. enterописание ссылки здесь

Может быть, вы хотите зашифровать или кодировать.

0 голосов
/ 27 декабря 2018

Нет, это невозможно, если ваш кортеж содержит строки и со встроенным hash().

Хэш строк преднамеренно делается переменным в сеансах Python, потому что в Python 3.4 это приводило к потенциальномупроблема безопасности ( PEP 456 ).В Python 3.5 это было исправлено путем создания разных хэшей строк в каждом сеансе Python.

Я рекомендую вам создать собственную функцию хеширования, чтобы она была стабильной, или использовать некоторые hashlib.

...