Python unhash值

bla*_*h01 8 python hash

我是蟒蛇的新手.我可以解开,或者我怎样才能解除价值.我正在使用std hash()函数.我想要做的是先将一个值哈希发送到某个地方,然后将其解开:

#process X
hashedVal = hash(someVal)
#send n receive in process Y
someVal = unhash(hashedVal)
#for example print it
print someVal
Run Code Online (Sandbox Code Playgroud)

Thx提前

ang*_*son 26

它无法完成.

哈希不是原始值的压缩版本,它是从原始值派生的数字(或类似的东西).哈希实现的本质是,两个不同的对象产生相同的哈希值是可能的(但在统计上不太可能,如果哈希算法是一个好的哈希算法).

这被称为Pigeonhole原则,它基本上表明,如果你有N个不同的项目,并且想要将它们放入M个不同的类别,其中N个数字大于M(即比项目更多的项目),你将会最终得到一些包含多个项目的类别.由于散列值的大小通常比散列的数据小得多,因此它遵循相同的原则.

因此,一旦有哈希值就不可能返回.您需要一种不同的传输数据的方式.

例如,一个示例(但不是非常好的)散列算法将是计算数模3(即除以3后的余数).然后,您将从数字中获得以下哈希值:

1 --> 1  <--+- same hash number, but different original values
2 --> 2     |
3 --> 0     |
4 --> 1  <--+
Run Code Online (Sandbox Code Playgroud)

您是否尝试以这种方式使用哈希函数以便:

  • 节省空间(您已观察到哈希值的大小远小于原始数据)
  • 安全运输(您已观察到哈希值难以逆转)
  • 传输数据(您已观察到散列数/字符串比复杂对象层次结构更容易传输)

......?

知道你为什么要这样做可能会给你一个更好的答案,而不仅仅是" 它无法完成 ".

例如,对于上述3种不同的观察结果,这里有一种方法可以正确地完成它们:

  • 压缩/解压缩,例如使用gzip或zlib(大多数编程语言/运行时通常可用的两个)
  • 加密/解密,例如使用RSA,AES或类似的安全加密算法
  • 序列化/反序列化,这是为了获取复杂的对象层次结构并生成二进制或文本表示的代码,以后可以将其反序列化为新对象


iul*_*ian 7

即使我迟了将近8年,我也想说有可能取消哈希数据处理hash()虽然不使用std 函数)。

以前的答案都是描述加密散列函数,其设计应计算是不可能的(或至少哈希非常难unhash)。

但是,并非所有哈希函数都如此。

您可以使用basehashpython lib(pip install basehash)实现所需的功能。

但是,有一件重要的事情要牢记:为了能够对数据进行哈希处理,您需要对数据进行哈希处理而不会丢失数据。通常,这意味着您要散列的数据类型和值池越大,散列长度就必须越大,这样就不会发生散列冲突。

无论如何,这是一个如何哈希/取消哈希数据的简单示例:

import basehash

hash_fn = basehash.base36()  # you can initialize a 36, 52, 56, 58, 62 and 94 base fn
hash_value = hash_fn.hash(1) # returns 'M8YZRZ'
unhashed = hash_fn.unhash('M8YZRZ') # returns 1
Run Code Online (Sandbox Code Playgroud)

您可以在哈希函数初始化中定义哈希长度,也可以对其他数据类型进行哈希。

对于希望了解更多有关散列的读者,我省去了各种基数和散列长度的必要性的解释。


And*_*ell 6

您不能“取消散列”数据,由于信鸽原理,散列函数不可逆

http://en.wikipedia.org/wiki/ 哈希函数
http://en.wikipedia.org/wiki/Pigeonhole_principle

我认为您正在寻找加密/解密。(或其他答案/评论中提到的压缩或序列化。)