Я - новичок к Python. Я могу не хешировать, или скорее как я могу не хешировать значение. Я использую хеш станд. () функция. То, что я хотел бы сделать, должно сначала хешировать значение, отправляют его куда-нибудь и затем не хешируют его как таковой:
#process X
hashedVal = hash(someVal)
#send n receive in process Y
someVal = unhash(hashedVal)
#for example print it
print someVal
Заранее спасибо
В общем случае это невозможно. Хэш-функция обязательно теряет информацию, и hash
в python не является исключением.
Вы не можете "отхешировать" данные, хэш-функции необратимы из-за принципа "голубятни"
http://en.wikipedia.org/wiki/Hash_function
http://en.wikipedia.org/wiki/Pigeonhole_principle
Я думаю, что вы ищете шифрование/дешифрование. (Или сжатие или сериализация, как упоминалось в других ответах/комментариях)
.Это невозможно.
Хэш - это не сжатая версия исходного значения, это число (или что-то подобное) , полученное из исходного значения. Природа реализаций хеширования состоит в том, что возможно (но статистически маловероятно, если алгоритм хеширования хороший), что два разных объекта производят одно и то же значение хеш-функции.
Это известно как Принцип голубятни , который в основном гласит, что если у вас есть N разных элементов, и вы хотите поместить их в M различных категорий, где число N больше, чем M (т. Е. Больше элементов чем категории), вы получите некоторые категории, содержащие несколько элементов. Поскольку хеш-значение обычно намного меньше по размеру, чем хешируемые данные, оно следует тем же принципам.
Таким образом, невозможно вернуться, если у вас есть хеш-значение. Вам нужен другой способ передачи данных.
Например, пример (но не очень хороший) хэш-алгоритма может заключаться в вычислении числового модуля 3 (т. Е. Остатка после деления на 3). Тогда у вас будут следующие хеш-значения из чисел:
1 --> 1 <--+- same hash number, but different original values
2 --> 2 |
3 --> 0 |
4 --> 1 <--+
Вы пытаетесь использовать хеш-функцию таким образом, чтобы:
.. .?
Знание, почему вы хотите это сделать, может дать вам лучший ответ, чем просто « это невозможно ».
Например, для трех вышеупомянутых различных наблюдений вот способ сделать каждое из них должным образом: