Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.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
为什么在Python3中我的重合指数和的平均值是错误的?_Python_Python 3.x_Cryptography_Python Cryptography - Fatal编程技术网

为什么在Python3中我的重合指数和的平均值是错误的?

为什么在Python3中我的重合指数和的平均值是错误的?,python,python-3.x,cryptography,python-cryptography,Python,Python 3.x,Cryptography,Python Cryptography,我制作了一个程序,试图通过计算每个x元素剪切的文本的所有一致性指数的平均值来计算法语文本中键的长度x,基本上我试图根据这个方法得到最接近0.06/0.07的IC平均值,但我的平均值看起来是错误的 注意:我只处理大写字符串,没有标点符号,没有特殊字符和空格。 我有3个函数,一个函数给我一个文本中出现字母的列表 字母表 def频率(txt): """ 返回列表中出现的所有字母 """ hist=[0.0]*len(字母表) 对于txt格式的字母: 历史[字母索引(字母)]+=1 返回历史记录 de

我制作了一个程序,试图通过计算每个x元素剪切的文本的所有一致性指数的平均值来计算法语文本中键的长度
x
,基本上我试图根据这个方法得到最接近0.06/0.07的IC平均值,但我的平均值看起来是错误的

注意:我只处理大写字符串,没有标点符号,没有特殊字符和空格。


我有3个函数,一个函数给我一个文本中出现字母的列表

字母表 def频率(txt): """ 返回列表中出现的所有字母 """ hist=[0.0]*len(字母表) 对于txt格式的字母: 历史[字母索引(字母)]+=1 返回历史记录 def IC(发生): """ 此函数从文本中获取字母出现的列表,并计算IC 并返回IC """ 和=0 n=总和(发生次数) 如果n==1: 返回0 对于发生的occ_信函: 总和=货币监理字母*(货币监理字母-1) 总和/=n*(n-1) 回报金额_ #这两个函数工作得很好(我相信是这样),但当我写这一个时: #这个函数可能是错误的 def密钥长度(密码): """ 密码是经过加密的文本。 通过剪切文本并尝试找到大于0.06的平均值来查找键的长度 返回键的长度 """ max_key_len=20#(键的长度永远不会超过20) 最大值=0 索引_max=0 对于范围内的x(1,最大键长度+1):#从1到20 片段=[范围(0,len(密码),x)内i的密码[i:i+x] #计算在x个片段中剪切的文本中所有片段的平均值 平均值=整件的总和(IC(频率(件))/len(件) 打印(平均值,x) 如果平均值>最大值: 最大值=平均值 索引_max=x 如果平均值>0.06: 打破 返回索引_max
通过追踪IC的平均值,我得出以下结论:

这些值都不超过0.06(但有些应该超过,因为7是实际键长度)。我在网上看到了一个能做到这一点的例子(点击按钮
计算可能的键长
),我在同一个文本中得到了一些非常不同的东西,其中L是键长,总之有点错误,但我似乎找不到它:

L=7 IC ≈ 0.07832 ± 0.006 --> This is the key
L=14 IC ≈ 0.07986 ± 0.013
L=21 IC ≈ 0.07504 ± 0.015
L=5 IC ≈ 0.04717 ± 0.028
L=10 IC ≈ 0.04667 ± 0.028
L=15 IC ≈ 0.04646 ± 0.029
L=19 IC ≈ 0.04616 ± 0.029
L=20 IC ≈ 0.04562 ± 0.029
L=22 IC ≈ 0.04523 ± 0.03
L=11 IC ≈ 0.04516 ± 0.03
L=4 IC ≈ 0.04515 ± 0.03
L=3 IC ≈ 0.04494 ± 0.03
L=1 IC ≈ 0.04487 ± 0.03
L=17 IC ≈ 0.04462 ± 0.03
L=2 IC ≈ 0.04453 ± 0.03
L=9 IC ≈ 0.04373 ± 0.031
L=23 IC ≈ 0.04352 ± 0.031
L=13 IC ≈ 0.04336 ± 0.032
L=8 IC ≈ 0.04319 ± 0.032
L=6 IC ≈ 0.04278 ± 0.032
L=26 IC ≈ 0.0426 ± 0.032
L=12 IC ≈ 0.04199 ± 0.033
L=16 IC ≈ 0.04128 ± 0.034
L=25 IC ≈ 0.04131 ± 0.034
L=18 IC ≈ 0.04006 ± 0.035
L=24 IC ≈ 0.03681 ± 0.038

在密钥长度猜测中,不使用
片段[i:i+x]
计算片段,这将无法提供执行IC评估所需的适当陪集

相反,您可能希望定义一个切入列函数:

def cut_in_列(文本,k):
"""
在k列中剪切文本
"""
列=[]表示范围(k)内的[uuu]
对于枚举中的i,l(文本):
列[i%k]。追加(l)
返回列
这将为您提供正确的
。 由于这是真的,我可以把你转到这篇文章:关于键长猜测

在代码中替换它会产生所需的结果

其基本性质在于这些密码方法的定义

顺便说一句,你应该测试你发布的代码,你有一个未定义的变量(法语
moyenne
mean
混合),并且在你的最大计算中提前返回,这甚至不是最大计算……你应该确保你的最小工作示例确实有效

L=7 IC ≈ 0.07832 ± 0.006 --> This is the key
L=14 IC ≈ 0.07986 ± 0.013
L=21 IC ≈ 0.07504 ± 0.015
L=5 IC ≈ 0.04717 ± 0.028
L=10 IC ≈ 0.04667 ± 0.028
L=15 IC ≈ 0.04646 ± 0.029
L=19 IC ≈ 0.04616 ± 0.029
L=20 IC ≈ 0.04562 ± 0.029
L=22 IC ≈ 0.04523 ± 0.03
L=11 IC ≈ 0.04516 ± 0.03
L=4 IC ≈ 0.04515 ± 0.03
L=3 IC ≈ 0.04494 ± 0.03
L=1 IC ≈ 0.04487 ± 0.03
L=17 IC ≈ 0.04462 ± 0.03
L=2 IC ≈ 0.04453 ± 0.03
L=9 IC ≈ 0.04373 ± 0.031
L=23 IC ≈ 0.04352 ± 0.031
L=13 IC ≈ 0.04336 ± 0.032
L=8 IC ≈ 0.04319 ± 0.032
L=6 IC ≈ 0.04278 ± 0.032
L=26 IC ≈ 0.0426 ± 0.032
L=12 IC ≈ 0.04199 ± 0.033
L=16 IC ≈ 0.04128 ± 0.034
L=25 IC ≈ 0.04131 ± 0.034
L=18 IC ≈ 0.04006 ± 0.035
L=24 IC ≈ 0.03681 ± 0.038