zoukankan      html  css  js  c++  java
  • A5/1流加密理解和算法实现

    算法理解

    ​ A5/1加密算法用于GSM蜂窝电话网络中的数据机密性加密,其使用3个线性反馈移位寄存器简称LFSR,分别为X 19位,Y 22位,Z 23位。

    ​ 加解密的过程是固定流程的,只需要按照方法进行轮计算即可,具体方法参考:https://www.cnblogs.com/gambler/p/9074356.html

    这个博客是我找的写的比较清楚明白的了,不要试图去理解为什么这个算法要那么做,因为他就是那样,就像我为什么长着手。


    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:]                                   #首位赋值
        if int(Y[10]) == m:
            y0 = int(Y[20]) ^ int(Y[21])
            t = str(bin((int(Y, 2) >> 1)))
            Y = t[2:]  # 取出0b
            Y = '0' * (22 - len(Y)) + Y
            Y = str(y0) + Y[1:]
        if int(Z[10]) == m:
            z0 = int(Z[7]) ^ int(Z[20]) ^ int(Z[21]) ^ int(Z[22])
            t = str(bin((int(Z, 2) >> 1)))
            Z = t[2:]  # 取出0b
            Z = '0' * (23 - len(Z)) + Z
            Z = str(z0) + Z[1:]
        S0 = int(X[18]) ^ int(Y[21]) ^ int(Z[22])
        print(S0,end=' ')
    print("
    X=%s
    Y=%s
    Z=%s" % (X, Y, Z))
    

    运行结果:

    32
    1 0 0 0 0 0 1 1 0 1 1 1 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 1 1 0 0 1 
    X=0001101000000000000
    Y=1111101010101010101010
    Z=01101010111100001010101
    
    Process finished with exit code 0
    
  • 相关阅读:
    php安装xcache (5.4)
    nginx博客系统(内含nginx图片缩略图处理代码,不错)
    一个mysql开启多个端口
    mysql源码重启
    ecshop支付时减库存方法
    n阶幻方问题
    codeforces 710A King Moves(水)
    关于ios::sync_with_stdio(false);和 cin.tie(0)加速c++输入输出流
    codeforces 701C. They Are Everywhere(尺取法)
    codeforces 701 B. Cells Not Under Attack
  • 原文地址:https://www.cnblogs.com/rower/p/12453875.html
Copyright © 2011-2022 走看看