Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 查找使用random.choice(范围(128))创建特定数字序列的种子?_Python_Python 3.x_Random_Random Seed - Fatal编程技术网

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()
),则会使用系统时间(纪元秒和微秒),这会大大缩小搜索范围,尤其是如果您对代码运行的时间有很好的猜测。由于使用了随机数生成器,这可能是可行的,但绝对不是暴力搜索。我想这是个好地方。这个工具看起来