本帖最后由 lichao 于 2024-2-23 17:09 编辑
SHA1 不安全,不过关键是你说追求速度用 CRC,实际上 CRC 的速度比不过 SHA1,而 SHA 1 的速度比不过 MD5 ...
"实际上 CRC 的速度比不过 SHA1,而 SHA 1 的速度比不过 MD5,不信你可以自己测测试试。"
怎么得到这个速度结论的?我立马写了个脚本测了下,没复现。crc就是因为计算简单所以应用最广
https://stackoverflow.com/questions/996843/when-is-crc-more-appropriate-to-use-than-md5-sha1
import time, zlib, hashlib
def test_crc(s):
ts1 = time.time()
for i in range(1000):
zlib.crc32(s)
ts2 = time.time()
return ts2 - ts1
def test_sha1(s):
ts1 = time.time()
for i in range(1000):
hashlib.sha1(s).digest()
ts2 = time.time()
return ts2 - ts1
def test_md5(s):
ts1 = time.time()
for i in range(1000):
hashlib.md5(s).digest()
ts2 = time.time()
return ts2 - ts1
for i in range(3, 20):
n = 2 ** i
s = b"n" * n
print(n, test_crc(s), test_sha1(s), test_md5(s))
8 0.0001647472381591797 0.001130819320678711 0.0018301010131835938
16 0.0001919269561767578 0.0010569095611572266 0.0010020732879638672
32 0.0002219676971435547 0.0010089874267578125 0.0010020732879638672
64 0.00029015541076660156 0.0010938644409179688 0.0010941028594970703
128 0.0002739429473876953 0.0011377334594726562 0.0011801719665527344
256 0.00033593177795410156 0.0012929439544677734 0.0014221668243408203
512 0.0004589557647705078 0.001560211181640625 0.0017600059509277344
1024 0.0006051063537597656 0.0020990371704101562 0.0025529861450195312
2048 0.0009191036224365234 0.003882884979248047 0.004523038864135742
4096 0.0015561580657958984 0.005532264709472656 0.0074920654296875
8192 0.002997159957885742 0.010485172271728516 0.014097929000854492
16384 0.005986928939819336 0.019515275955200195 0.026486873626708984
32768 0.010529756546020508 0.03759407997131348 0.05156302452087402
65536 0.020674943923950195 0.07198619842529297 0.10092425346374512
131072 0.0433049201965332 0.14149093627929688 0.19953060150146484
262144 0.08152174949645996 0.2673459053039551 0.3763251304626465
524288 0.16224002838134766 0.5112760066986084 0.784217119216919
如果你用c++玩hash的话有没有试过自带的std::hash,没看到你提这个
|