Python散列值

扫码查看

我是python的新手。我可以散列,还是可以散列值。我正在使用std hash()函数。我想要做的是首先对一个值进行哈希处理,然后将其发送到某个地方,然后再对其进行哈希处理:

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

提前Thx

最佳答案

不能做

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

这就是Pigeonhole Principle,它基本上表明如果您有N个不同的项目,并且想要将它们放在M个不同的类别中,其中N数大于M(即,项目比类别更多),那么您将结束包含多个项目的某些类别。由于散列值的大小通常比其散列的数据小得多,因此它遵循相同的原理。

因此,一旦获得哈希值,就无法返回。您需要的传输数据的方式与此不同。

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

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

您是否正在尝试以这种方式使用哈希函数,以便:
  • 节省空间(您已经观察到哈希值的大小比原始数据小得多)
  • 安全运输(您已经观察到哈希值很难逆转)
  • 传输数据(您已经观察到散列号/字符串比复杂的对象层次结构更易于传输)

  • ...?

    知道为什么要这样做可能会给您一个比“无法完成”更好的答案。

    例如,对于以上3个不同的观察,下面是一种正确执行每个观察的方法:
  • 压缩/解压缩,例如使用gzip或zlib(这两种语言通常在大多数编程语言/运行时中都可用)
  • 加密/解密,例如使用RSA,AES或类似的安全加密算法
  • 序列化/反序列化,其代码旨在采用复杂的对象层次结构并生成二进制或文本表示形式,之后可以反序列化回新对象
  • 09-11 17:44
    查看更多