算法理解
A5/1加密算法用于GSM蜂窝电话网络中的数据机密性加密,其使用3个线性反馈移位寄存器简称LFSR,分别为X 19位,Y 22位,Z 23位。
这个博客是我找的写的比较清楚明白的了,不要试图去理解为什么这个算法要那么做,因为他就是那样,就像我为什么长着手。
python实现
其实用C语言实现比较快,但是最近在学python,所以。。。。。
代码:
X = '1010101010101010101'
Y = '1100110011001100110011'
Z = '11100001111000011110000'
n=int(input())
for i in range(n):
maj = int(X[8]) + int(Y[10]) + int(Z[10])
if maj >= 2:
m = 1
else:
m = 0
if int(X[8]) == m: #判断是否要为首位赋值
x0 = int(X[13]) ^ int(X[16]) ^ int(X[17]) ^ int(X[18])#求0位值
t = str(bin((int(X, 2) >> 1))) #移位操作
X = t[2:] # 取出0b
X = '0' * (19 - len(X)) + X #补充移位后缺少的前几位
X = str(x0) + X[1:] #首位赋值