vau*_*tah 2 python hash python-3.x python-3.3 random-seed
从CPython 3.3开始,默认情况下启用哈希随机化.在以前的版本中,它可以通过指定被打开-R
命令行选项,或通过设置PYTHONHASHSEED
环境变量来random
.
引用文档:
默认情况下,
__hash__()
str,bytes和datetime对象的值使用不可预测的随机值"加盐".虽然它们在单个Python进程中保持不变,但是在重复调用Python之间它们是不可预测的.
这是否意味着生成的值将加密强大?
在Python 3.3中,散列种子不具有加密强度; 它是在启动时使用以下伪随机生成器生成的:
/* Fill buffer with pseudo-random bytes generated by a linear congruent
generator (LCG):
x(n+1) = (x(n) * 214013 + 2531011) % 2^32
Use bits 23..16 of x(n) to generate a byte. */
static void
lcg_urandom(unsigned int x0, unsigned char *buffer, size_t size)
{
size_t index;
unsigned int x;
x = x0;
for (index=0; index < size; index++) {
x *= 214013;
x += 2531011;
/* modulo 2 ^ (8 * sizeof(int)) */
buffer[index] = (x >> 16) & 0xff;
}
}
Run Code Online (Sandbox Code Playgroud)
这不是加密强大的.
Python 3.4 通过默认引入更安全的哈希算法来解决这些问题,并使其可插入.
如果您在程序中使用random.SystemRandom()
或需要加密强大的随机数os.urandom()
.
归档时间: |
|
查看次数: |
793 次 |
最近记录: |