用Python生成新的IV

时间:2018-08-07 03:42:29

标签: 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]IV[0]=[1,0,1,0,1]。新的IV应该更新为X[0]+IV[0]=IV[1] which will produce the result of [1,1,1,1,0]X[0]IV[0]是周期0的位和初始化向量的列表。 对于下一个n=5,将连续重复生成新IV的操作,直到n=100

请帮助我解决此问题。谢谢。

1 个答案:

答案 0 :(得分:1)

我认为您想要的是一个对两个整数列表(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]