Python 查找使用random.choice(范围(128))创建特定数字序列的种子?
我想找到创建特定数字序列的种子:Python 查找使用random.choice(范围(128))创建特定数字序列的种子?,python,python-3.x,random,random-seed,Python,Python 3.x,Random,Random Seed,我想找到创建特定数字序列的种子: [115,91,45,76,78,93,35,5,29,8,99,88,98,70,40,116,11,39,102,41,124,98,120,57,36,67,57,23,52,34,75,32,117,66,12,19,86,67,62,121,60,5,54,37,65,18,5,56,66,115,32,99,73,70,115,73,123,74,31] 我想知道我是否能找到一个seed,它通过我创建的函数get()给出这个结果: def get(
[115,91,45,76,78,93,35,5,29,8,99,88,98,70,40,116,11,39,102,41,124,98,120,57,36,67,57,23,52,34,75,32,117,66,12,19,86,67,62,121,60,5,54,37,65,18,5,56,66,115,32,99,73,70,115,73,123,74,31]
我想知道我是否能找到一个seed,它通过我创建的函数get()给出这个结果:
def get():
seed(x)
return [choice(range(128)) for _ in range(59)]
x是一个常数,等于作为种子应用的数字,给我序列上面的右上角
这是我制作的一个小程序,希望能找到它,但现在我已经测试了大约160万个种子,但仍然一无所获
from random import choice, seed
lc =[115,91,45,76,78,93,35,5,29,8,99,88,98,70,40,116,11,39,102,41,124,98,120,57,36,67,57,23,52,34,75,32,117,66,12,19,86,67,62,121,60,5,54,37,65,18,5,56,66,115,32,99,73,70,115,73,123,74,31]
sd, h = 0,0
while 1:
seed(sd)
for c, o in enumerate(lc):
if not choice(range(128)) == o:
if c > h :
print(f"[Seeed {sd}] {c} matchs")
h = c
sd += 1
break
有人能帮我找到一个合适的种子吗?使用蛮力,假设每个种子都代表从您的数字集(128)中提取的一个,替换后,您有
1/(128)^59 = 1 / 2.1153791001287955166461289857048673274508949854856999 × 10^124
对于每次提取,以获得精确的数字集(假设随机函数的每次数字提取均为均匀分布)。这是一个非常接近于零的概率
所以是的。使用蛮力搜索,你可以(几乎)永远挂起,并且假设每个种子都代表从你的数字集合(128)中提取的一个种子,替换后,你有
1/(128)^59 = 1 / 2.1153791001287955166461289857048673274508949854856999 × 10^124
对于每次提取,以获得精确的数字集(假设随机函数的每次数字提取均为均匀分布)。这是一个非常接近于零的概率
所以是的。你可能(几乎)永远被绞死,因为那次暴力搜索我希望这是不可能的。 从技术上讲,可以编写一个准随机生成器,允许通过短序列的结果恢复种子。但普通的准随机发生器不允许这样做。 例如,对于非常常见的Mersenne捻线机,内部状态为624英寸。但你的种子只是一个整数。
即使你对种子施以蛮力,使你获得相同的短序列,整个内部实际状态可能会不同,随后的生成将完全以另一种方式进行 我希望这不可能。 从技术上讲,可以编写一个准随机生成器,允许通过短序列的结果恢复种子。但普通的准随机发生器不允许这样做。 例如,对于非常常见的Mersenne捻线机,内部状态为624英寸。但你的种子只是一个整数。
即使你对种子施以蛮力,使你获得相同的短序列,整个内部实际状态可能会不同,随后的生成将完全以另一种方式进行 任何种子PRNG都将有一个公式,用于根据其持有的内部数据生成下一个数字。使用像线性全等PRNG这样简单的东西,就可以很容易地从输出中反算公式中使用的内部数据和数字。对于更复杂的PRNG,如Mersenne捻线机,则反向计算变得非常困难 一种解决方案是复制您想要的数字序列并将其存储在某个位置,根据需要从存储中提取它们。或者,阅读最初用于生成这些数字的PRNG文件,看看是否可以进行反向计算
如果数字来自加密安全的PRNG,那么您的任务将变得更加困难。任何种子PRNG都有一个公式,可以从其持有的内部数据生成下一个数字。使用像线性全等PRNG这样简单的东西,就可以很容易地从输出中反算公式中使用的内部数据和数字。对于更复杂的PRNG,如Mersenne捻线机,则反向计算变得非常困难 一种解决方案是复制您想要的数字序列并将其存储在某个位置,根据需要从存储中提取它们。或者,阅读最初用于生成这些数字的PRNG文件,看看是否可以进行反向计算
如果数字来自加密安全的PRNG,那么您的任务将变得更加困难。我的第一个猜测是,您想重新设计一些癫痫曲线,从中生成seed()。我相信您的代码是否会生成您所寻找的种子还不确定。不能保证
random.choice
会提供您想要的序列。你是否意识到你正在试图从几乎4 x 10**125个可能的序列中找到一个?一般来说,你运气不好。即使找到了创建匹配序列的种子,也不能保证种子本身匹配(即,两个序列将以相同的方式继续)。但是,如果有可能在没有参数(x==None
)的情况下调用了random.seed()
),则会使用系统时间(纪元秒和微秒),这会大大缩小搜索范围,尤其是如果您对代码运行的时间有很好的猜测。由于使用了随机数生成器,这可能是可行的,但绝对不是暴力搜索。我想这是个好地方。这个工具看起来很相关:我的第一个猜测是,你想重新设计一些癫痫曲线,seed()就是从这些曲线生成的……我相信你的代码是否会产生你想要的种子还不确定。不能保证random.choice
会提供您想要的序列。你是否意识到你正在试图从几乎4 x 10**125个可能的序列中找到一个?一般来说,你运气不好。即使找到了创建匹配序列的种子,也不能保证种子本身匹配(即,两个序列将以相同的方式继续)。但是,如果有可能在没有参数(x==None
)的情况下调用了random.seed()
),则会使用系统时间(纪元秒和微秒),这会大大缩小搜索范围,尤其是如果您对代码运行的时间有很好的猜测。由于使用了随机数生成器,这可能是可行的,但绝对不是暴力搜索。我想这是个好地方。这个工具看起来