zoukankan      html  css  js  c++  java
  • 循环冗余校验码CRC算法实现和求出碰撞值

    image-20200328163113528

    答:

    八位的碰撞一共有八个

    10001101 1010
    10011110 1010
    10101011 1010
    10111000 1010
    11000001 1010
    11010010 1010
    11100111 1010
    11110100 1010

    image-20200328163126254

    代码

    a=['1', '0', '0', '1', '1']       #除数
    b=['1', '0', '1', '0', '1', '0', '1', '1'] #校验数值
    c=['0', '0', '0', '0']
    z=b+c
    k=4
    x=int(''.join(a),2)#先转为字符串再转换成整数
    y=int(''.join(z[0:5]),2)
    while k<len(z):
        xy=list(bin(x^y)[2:])#整数异或
        if len(a)-len(xy)>len(z)-k+1:#不足5位结束
            break
        else:
            t=k
            k += len(a) - len(xy)
            xy+=z[t+1:t+1+len(a)-len(xy)]#借位
            y=int(''.join(xy),2)
    if len(xy)<4:
        xy.insert(0,(4-len(xy))*'0')
    K=xy  #求出CRC
    n=128 #10000000
    N=0
    while n<=256:#遍历求出碰撞
        d = list('{:08b}'.format(n))
        z = d + c
        y = int(''.join(z[0:5]), 2)
        k=4
        while k < len(z):
            xy = list(bin(x ^ y)[2:])
            if len(a) - len(xy) > len(z) - k + 1:
                break
            else:
                t = k
                k += len(a) - len(xy)
                xy += z[t + 1:t + 1 + len(a) - len(xy)]
                y = int(''.join(xy), 2)
        if len(xy) < 4:
            xy.insert(0, (4 - len(xy)) * '0')
        if xy==K:
            print(''.join(d),end=' ')
            print(''.join(xy))
            N+=1
        n+=1
    print(N)#总数
  • 相关阅读:
    linux 环境变量
    php 守护进程类
    PHP 操作 进程时相关 信号的具体含义
    mongodb 的注意点
    安装了包,pycharm却提示找不到包
    php7下 xhprof安装与使用
    mysql 大数据 查询方面的测试
    mysql 分页测试,
    jmeter 使用
    初步jmeter安装与使用
  • 原文地址:https://www.cnblogs.com/rower/p/12588972.html
Copyright © 2011-2022 走看看