我是蟒蛇的新手.我可以解开,或者我怎样才能解除价值.我正在使用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种不同的观察结果,这里有一种方法可以正确地完成它们:
即使我迟了将近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)
您可以在哈希函数初始化中定义哈希长度,也可以对其他数据类型进行哈希。
对于希望了解更多有关散列的读者,我省去了各种基数和散列长度的必要性的解释。
您不能“取消散列”数据,由于信鸽原理,散列函数不可逆
http://en.wikipedia.org/wiki/ 哈希函数
http://en.wikipedia.org/wiki/Pigeonhole_principle
我认为您正在寻找加密/解密。(或其他答案/评论中提到的压缩或序列化。)