Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.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中生成新的IV_Python_Bit_Initialization Vector - Fatal编程技术网

在Python中生成新的IV

在Python中生成新的IV,python,bit,initialization-vector,Python,Bit,Initialization Vector,我有一个100位的列表,例如: X=''.join([random.choice(['0', '1']) for i in range(100)]) X=[0,1,0,1,1...] 在循环开始时,我已生成长度为n的随机初始化向量: Xlen=5 IV=''.join([random.choice(['0', '1']) for i in range(Xlen)]) 问题是我需要使用位加法函数基于先前的X[n]和IV[n]生成新的IV。请注意,n=5 例如X[0]=[0,1,0,0,1]和

我有一个100位的列表,例如:

X=''.join([random.choice(['0', '1']) for i in range(100)])

X=[0,1,0,1,1...]
在循环开始时,我已生成长度为n的随机初始化向量:

Xlen=5
IV=''.join([random.choice(['0', '1']) for i in range(Xlen)])
问题是我需要使用位加法函数基于先前的
X[n]
IV[n]
生成新的IV。请注意,
n=5

例如
X[0]=[0,1,0,0,1]
IV[0]=[1,0,1,0,1]
。新的
IV
应更新为
X[0]+IV[0]=IV[1],这将产生[1,1,1,1,0]
的结果。
X[0]
IV[0]
是周期0处的位和初始化向量列表。 生成新IV的操作将在下一个
n=5
中持续重复,直到
n=100


请帮我解决这个问题。谢谢。

我认为您需要的是一个函数,它对两个整数列表(IV和部分数据)进行异或运算,并生成它的异或版本。可以使用python中的运算符
^
实现该函数

我在这里使用“位”作为整数,但是如果需要使用字符串,可以在调用函数之前使用
int()
转换每个字符

def get_new_iv_value(prev_iv, X):
    new_iv = [x ^ y for (x,y) in zip(prev_iv, X)]
    return new_iv
下面是一个如何使用此函数为X的每5个元素计算新IV的示例

# Create X with 10 'bits' (integers with values 0 or 1)
X = [random.randint(0,1) for i in range(10)]

# Set initial IV with size 5
IV = [1,0,1,0,1]

# This will calculate one new IV for each 5 elements in X
for n in range(0, 100, 5): 
    IV = get_new_iv_value(IV, X[n:n+5])
结果是:

IV[0] = [1, 0, 1, 0, 1]
X = [1, 0, 0, 0, 0, 0, 1, 1, 0, 1]
IV[1] = IV[0] + X[0:5]
[0, 0, 1, 0, 1] = [1, 0, 1, 0, 1] + [1, 0, 0, 0, 0]
IV[2] = IV[1] + X[5:10]
[0, 1, 0, 0, 0] = [0, 0, 1, 0, 1] + [0, 1, 1, 0, 1]

您在这里声明的列表包含一个元素,一个相当大的整数。你确定那就是你所拥有的吗?(因为它与您的文本冲突)这可能是一个字符串(int以0开头没有意义?)。您的问题严重地暗示了
IV[0]
是一个位数,但您也说
IV[0]=10101
。是哪一个?@RafaelC:你说得对,这毫无意义。所以OP应该澄清他到底有什么,而不是让我们猜测。@Amadan实际上是数组中的位列表。@John Gordon.
IV[0]
是循环0处的初始化向量。@klaus.如果我有IV的列表:
[0,0,0,1,0][1,0,0,0,1]
如何将其组合回[0,0,0,1,0,1,1,0,0,0,0,1],你可以使用“+”来连接两个列表:
a=[0,0,0,0,0,1,0]
b=[1,0,0,0,0,1]
c=a+b
c=[0,0,0,1,0,1,0,0,0,1]