Python hash()随机化被认为是加密的强大吗?

Python hash()随机化被认为是加密的强大吗?,python,python-3.x,hash,python-3.3,random-seed,Python,Python 3.x,Hash,Python 3.3,Random Seed,从开始,默认情况下启用哈希随机化。在以前的版本中,可以通过指定或将设置为random来启用该功能 引用: 默认情况下,str、bytes和datetime的值 对象被不可预测的随机值“腌制”。虽然他们 在单个Python进程中保持不变,它们不是 可在重复调用Python之间预测 这是否意味着生成的值在加密方面会很强 在Python3.3中,散列种子的加密能力不强;它是在启动时使用以下伪随机生成器生成的: /*使用线性同余函数生成的伪随机字节填充缓冲区 发电机(LCG): x(n+1)=(x(n)

从开始,默认情况下启用哈希随机化。在以前的版本中,可以通过指定或将设置为
random
来启用该功能

引用:

默认情况下,str、bytes和datetime的值 对象被不可预测的随机值“腌制”。虽然他们 在单个Python进程中保持不变,它们不是 可在重复调用Python之间预测


这是否意味着生成的值在加密方面会很强

在Python3.3中,散列种子的加密能力不强;它是在启动时使用以下伪随机生成器生成的:

/*使用线性同余函数生成的伪随机字节填充缓冲区
发电机(LCG):
x(n+1)=(x(n)*214013+2531011)%2^32
使用x(n)的位23..16生成一个字节*/
静态空隙
lcg_Uradom(无符号整数x0,无符号字符*缓冲区,大小)
{
尺寸指数;
无符号整数x;
x=x0;
对于(索引=0;索引>16)&0xff;
}
}
但事实并非如此

还有一些仍然使强制碰撞成为可能

Python3.4默认情况下引入了,并使其可插入


如果您的程序中需要加密强随机数,请使用或替代。

在3.4之前,Python使用了FNV的一个变体,它在加密方面不安全。不幸的是,简单地向Python这样的弱散列函数添加一个随机值并不能提供任何真正的安全性。由于底层散列算法的弱点,即使在存在随机化的情况下,也很容易生成具有相同FNV散列的字符串

注意,即使种子是完全随机的,并且没有泄露给客户端,这也是正确的

考虑为什么,想象一个非常弱的哈希函数——简单地把字符串中的所有字符相加。在这种情况下,如果在开头添加一个随机值,则任何单个字符串的哈希都将是随机的。但是,如果两个字符串的字符总和为相同的值,则无论随机种子是什么,它们都将散列为相同的值。因此,随机种子不提供任何碰撞阻力。Python实际上做的并没有那么糟糕,但也没有好多少


在3.4中,Python将默认算法切换为SipHash,该算法通过密码保护以防止碰撞DOS攻击。不幸的是,任何使用2.x的人都完全不走运。

你所说的加密安全(至少一次会话)是什么意思?此外,整数的
哈希值
仅是该整数。这在解释器调用之间不会改变。