Значение нехеша Python

Я - новичок к Python. Я могу не хешировать, или скорее как я могу не хешировать значение. Я использую хеш станд. () функция. То, что я хотел бы сделать, должно сначала хешировать значение, отправляют его куда-нибудь и затем не хешируют его как таковой:

#process X
hashedVal = hash(someVal)
#send n receive in process Y
someVal = unhash(hashedVal)
#for example print it
print someVal

Заранее спасибо

8
задан SilentGhost 9 June 2010 в 14:21
поделиться

3 ответа

В общем случае это невозможно. Хэш-функция обязательно теряет информацию, и hash в python не является исключением.

0
ответ дан 5 December 2019 в 04:52
поделиться

Вы не можете "отхешировать" данные, хэш-функции необратимы из-за принципа "голубятни"

http://en.wikipedia.org/wiki/Hash_function
http://en.wikipedia.org/wiki/Pigeonhole_principle

Я думаю, что вы ищете шифрование/дешифрование. (Или сжатие или сериализация, как упоминалось в других ответах/комментариях)

.
6
ответ дан 5 December 2019 в 04:52
поделиться

Это невозможно.

Хэш - это не сжатая версия исходного значения, это число (или что-то подобное) , полученное из исходного значения. Природа реализаций хеширования состоит в том, что возможно (но статистически маловероятно, если алгоритм хеширования хороший), что два разных объекта производят одно и то же значение хеш-функции.

Это известно как Принцип голубятни , который в основном гласит, что если у вас есть N разных элементов, и вы хотите поместить их в M различных категорий, где число N больше, чем M (т. Е. Больше элементов чем категории), вы получите некоторые категории, содержащие несколько элементов. Поскольку хеш-значение обычно намного меньше по размеру, чем хешируемые данные, оно следует тем же принципам.

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

Например, пример (но не очень хороший) хэш-алгоритма может заключаться в вычислении числового модуля 3 (т. Е. Остатка после деления на 3). Тогда у вас будут следующие хеш-значения из чисел:

1 --> 1  <--+- same hash number, but different original values
2 --> 2     |
3 --> 0     |
4 --> 1  <--+

Вы пытаетесь использовать хеш-функцию таким образом, чтобы:

  • Экономить место (вы заметили, что хеш-значение намного меньше по размеру, чем исходное data)
  • Безопасная транспортировка (вы заметили, что значение хеш-функции трудно изменить)
  • Транспортные данные (вы заметили, что номер / строку хеш-кода легче транспортировать, чем сложную иерархию объектов)

.. .?

Знание, почему вы хотите это сделать, может дать вам лучший ответ, чем просто « это невозможно ».

Например, для трех вышеупомянутых различных наблюдений вот способ сделать каждое из них должным образом:

  • Сжатие / декомпрессия, например, с использованием gzip или zlib (оба обычно доступны в большинстве языков программирования / сред выполнения)
  • Шифрование / дешифрование, например, с использованием RSA, AES или аналогичного алгоритма безопасного шифрования
  • Сериализация / десериализация, который представляет собой код, созданный для получения сложной иерархии объектов и создания двоичного или текстового представления, которое впоследствии может быть десериализовано обратно в новые объекты
26
ответ дан 5 December 2019 в 04:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: