【发布时间】:2012-10-24 09:33:09
【问题描述】:
在哪里可以找到关于 os.urandom 的完整教程或文档?我需要得到一个随机 int 来从 80 个字符的字符串中选择一个字符。
【问题讨论】:
-
你为什么接受一个没有回答你问题标题的答案。更改您接受的答案或更改您的问题。如果您想了解 os.random 及其用途,那么您应该更正您接受的答案。
标签: python random python-3.x
在哪里可以找到关于 os.urandom 的完整教程或文档?我需要得到一个随机 int 来从 80 个字符的字符串中选择一个字符。
【问题讨论】:
标签: python random python-3.x
如果只需要随机整数,可以使用random.randint(a, b) from the random module。
如果您需要它用于加密目的,请使用random.SystemRandom().randint(a, b),它使用os.urandom()。
import random
r = random.SystemRandom()
s = "some string"
print(r.choice(s)) # print random character from the string
print(s[r.randrange(len(s))]) # same
【讨论】:
random.choice 也可能是一个合理的选择。
random.choice 也可以,这取决于他最终想要对随机字符做什么。
random.SystemRandom 代替random。它利用os.urandom() 并提供与random 相同的功能。
可能不完全是主题,但我想帮助那些从搜索引擎来到这里的人。要将os.urandom 转换为整数,我正在使用:
import os
rand = int(int(str(os.urandom(4), encoding="UTF-8")).encode('hex'), 16)
# You can then 'cycle' it against the length.
rand_char = chars_list[rand % 80] # or maybe '% len(chars_list)'
注意:这里的索引范围最大为4字节整数。如果您想要更多,请将4 更改为更大的值。
这个想法来自这里:https://pythonadventures.wordpress.com/2013/10/04/generate-a-192-bit-random-number/
【讨论】:
rand=int.from_bytes(os.urandom(4), sys.byteorder)