在 Python 中生成随机种子
Generate Random Seed In Python
有没有办法生成随机种子?像这样:
def random_seed(length)
输出示例:
3273650411015667511766
或者有没有办法同时处理数字和字母?
输出示例:
ryf65s4d4s6df54s6y4fs6f5b4y6s4fy
这似乎有效;
import random
length=random.randint(1,30)
chars=[char for char in '0123456789abcdefghijklmnopqrstuvwxyz']
print(chars)
seed=''
for i in range(length): seed=seed+random.choice(chars)
print(seed)
对于整数:
import random
def random_seed(length):
random.seed()
min = 10**(length-1)
max = 9*min + (min-1)
return random.randint(min, max)
对于字符串,一个天真的方法可能是:
import random
choices = '0123456789abcdefghijklmnopqrstuvwxyz'
def random_char(pos):
return random.choice(choices)
def random_seed(length):
l = [None]*length
random.seed()
return "".join(list(map(random_char, l)))
注意,这不应该用于安全目的你必须依赖 os.urandom
。
您可以使用 os.urandom
。它让您指定要生成的随机字节数。当然,您可以将这些字节转换/解释为您喜欢的任何内容(整数、字符……)。例如:
>>> import os
>>> os.urandom(16)
b'-\xca(\xd2\xf7 \xe3:\x8fj\x19#\xe0-\xb8X'
os.urandom
将使用 OS 随机源(例如传感器值等)。如果您调用 random.seed()
时不带参数,它也会回退到 OS 随机性(如果可用),否则是当前系统时间。
解释字节的可能方法:
>>> int.from_bytes(os.urandom(16), 'big')
305697826269747251034239012950993064203
有没有办法生成随机种子?像这样:
def random_seed(length)
输出示例:
3273650411015667511766
或者有没有办法同时处理数字和字母? 输出示例:
ryf65s4d4s6df54s6y4fs6f5b4y6s4fy
这似乎有效;
import random
length=random.randint(1,30)
chars=[char for char in '0123456789abcdefghijklmnopqrstuvwxyz']
print(chars)
seed=''
for i in range(length): seed=seed+random.choice(chars)
print(seed)
对于整数:
import random
def random_seed(length):
random.seed()
min = 10**(length-1)
max = 9*min + (min-1)
return random.randint(min, max)
对于字符串,一个天真的方法可能是:
import random
choices = '0123456789abcdefghijklmnopqrstuvwxyz'
def random_char(pos):
return random.choice(choices)
def random_seed(length):
l = [None]*length
random.seed()
return "".join(list(map(random_char, l)))
注意,这不应该用于安全目的你必须依赖 os.urandom
。
您可以使用 os.urandom
。它让您指定要生成的随机字节数。当然,您可以将这些字节转换/解释为您喜欢的任何内容(整数、字符……)。例如:
>>> import os
>>> os.urandom(16)
b'-\xca(\xd2\xf7 \xe3:\x8fj\x19#\xe0-\xb8X'
os.urandom
将使用 OS 随机源(例如传感器值等)。如果您调用 random.seed()
时不带参数,它也会回退到 OS 随机性(如果可用),否则是当前系统时间。
解释字节的可能方法:
>>> int.from_bytes(os.urandom(16), 'big')
305697826269747251034239012950993064203