2024-09-01
Python
00

python内建函数hash()针对不可变对象提供计算哈希值,但我觉得没啥用,可能这个函数的唯一作用就是python字典用了这个函数实现哈希。

python内建库hashlib库提供了很多哈希算法。

哈希算法也称为散列算法,就是把不可变对象依靠着哈希函数映射到一串字符。

哈希函数(不可变对象)= 哈希结果

性质:

  • 1 不可变对象有无穷多个,哈希结果长度一般是唯一的,也就是说哈希结果个数是有限个。那么从无限个到有限个的映射,必然有哈希冲突:两个不一样的不可变对象映射到了同一个哈希结果。

  • 2 显而易见的是,哈希结果的长度越长,能表示的不可变对象越多,冲突可能会少。

  • 3 sha256就是一种哈希函数。长度还挺高。256个二进制位!

  • 4 同一个不可变对象每次出来的哈希结果必须相同!

  • 5 哈希函数计算得越快越好,这是哈希的用途理念决定的。

  • 6 相似的不可变对象的哈希结果需要相差很大。

  • 7 知道哈希结果反推出不可变对象,必须是一件不可能的事情。

在这里插入图片描述

python
import hashlib import traceback for i in ('md5', 'sha1', 'sha224', 'sha256', 'sha384', 'sha512', 'blake2b', 'blake2s', 'sha3_224', 'sha3_256', 'sha3_384', 'sha3_512'): try: print(i,'------------>') print(getattr(hashlib, i)("block_string".encode()).hexdigest()) except: traceback.print_exc() print(i)

结果

md5 ------------>

3042e468364703bfc1d2fd07306cb44b

sha1 ------------>

9560f723997057817cd85d068d3b579761122f1b

sha224 ------------>

32bbdcf30cca685f4aceaca23855596b9cd758844f4e9c81c449689e

sha256 ------------>

8f4a106f3a2c581fa60a968c74bf5e7b2ed4c03aa9739dadd197d6aae0c7d343

sha384 ------------>

047c4bbb27e91c2957bd588031dbadb86879ce2a12181c817077433a0f54dcfd23b16f22d8234b5d2be38ec0e7c97c54

sha512 ------------>

b796f690a39228c45952c3f5a1d12ca8086d4333c95b0855e31e7bcbcc1d88b0e8d250cbd89d9f11183733862d78b76984d16b316d512163a83b45f269912723

blake2b ------------>

2f2d7350968dd64f75fa7d045c6bbb70fedd20950e026d03c299f1aad29300572cc7f389e6eb4e5c8603d39dab720dc4087f200de51983d4683f74bd5aa36b61

blake2s ------------>

931e57c1ed77bfc3854a900dd4e5403d69ad4bb73d38289c214bd2abd508f874

sha3_224 ------------>

b25758d1ff393afa0c5bb07f9e7e3170d7bdf87c94a299db2c747a0c

sha3_256 ------------>

97ae01c43d6a0151fa4fd80fe565b39811950308fad5b8fac4b89515084f7307

sha3_384 ------------>

d9a5d65d50c0b8364686e5752fb990d3bb03314255b83924992a451c51ec45e679c60b379c86ff5f6aba9b11c9a928ea

sha3_512 ------------>

8cb00f6b561d411ecb8ec9b0de57ae34ddece0ac3cf10f1c338629815a7301113de00d4ffc7f8da510ff46bc0cbc62bb944d2d9896bfc3e416485c60a4d66e6d

如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:Dong

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!